發表文章

程式設計常見的幾個原則整理

SOLID原則(SRP, OCP, LSP, ISP, DIP) SRP(Single responsibility,單一職責) 定義:一個class應該只有一個需要改變的原因。 There should never be more than one reason for a class to change. 白話:一個class只作一件事。 OCP(Open-closed,開放封閉) 定義:軟體設計,應該對擴充開放,對修改封閉。 Software entities like classes, modules and functions should be open for extension but closed for modifications. 白話:軟體要很容易擴充功能,且擴充時原有的code都不需修改。 LSP(Liskov substitution,Liskov替換) 定義:子類必須能夠替換其父類別。 Inheritance should ensure that any property proved about supertype objects also holds for subtype objects. 白話:設計父類別時,只把所有的子類都有的東西放進來。 ISP(Interface segregation,介面隔離) 定義:客戶(Client)只要依賴它們所需的介面 Clients should not be forced to depend upon interfaces that they don't use. 白話:設計介面也盡量簡單,別把不相關的東西放進來。 DIP(Dependency inversion,依賴倒轉) 定義: 高階模組不應依賴低階模組,兩者應依賴抽象概念。 High-level modules should not depend on low-level modules. Both should depend on abstractions.  抽象概念不應依賴細節,細節應依賴抽象概念。 Abstractions should not depend on details. Details should depend on abstractions. ...

[心得]30天快速上手TDD讀後心得

看完了《 30快速上手TDD 》,整理一些我認為蠻重要的心得跟大家分享。 1. ATDD(USER STORY)   <->BDD(DSL TO Programming Language)   <->TDD(include integration test, unit test and refactor) 白話來說,就是用戶使用ATDD來寫好USER STORY後,用BDD轉成程式設計師看得懂的規格後,再讓程式設計師用TDD的方式開發測試 Ref: [30天快速上手TDD][Day 26]User Story/ATDD/BDD/TDD - 總結 2. 職責分離==> 找出誰,在做什麼事! 要找出「誰,做什麼事」,有一個相當相當簡單的技巧,相信大家一學就會。針對前面透過人話所整理出來的 function ,只要找出該 function 代表的意義中的 「主詞」、「動詞」、「受詞」 即可。  什麼意思?很簡單:    主詞:代表類別;    動詞:代表方法;    受詞:通常是方法參數;    形容詞:通常是呼叫物件行為後,物件產生的狀態變化。   EX1-CalculatedByBlackCat():黑貓,計算運費 Ref: [30天快速上手TDD][Day 12]Refactoring - 職責分離 3. 介面導向==> 『用該物件的角度去看世界,除了物件自己本身以外,看出去外面的世界,都是介面。』  Ref: [30天快速上手TDD][Day 16]Refactoring - 介面導向

[心得] TDD已死?總結一下最近我對於程式測試的想法

最近在研究程式設計的測試部份,總結一下我目前對測試的看法, 因此如果覺得測試是狗屁的,可以跳過不看這篇文章; 而如果想要了解更多測試的知識,可以參考一下:

Linux基礎概念(Linux Basic Concept)

一、Linux 核心(Kernel)      Shell/KDE/Application <-> Kernel <-> Hardware     從技術上說Linux只是一個內核。     「內核」指的是一個提供硬體抽象層、磁碟及檔案系統控制、多工等功能的系統軟體。     一個內核並不是一套完整的作業系統。     有一套基於Linux內核的完整作業系統叫作Linux作業系統     Ref:      https://zh.wikipedia.org/wiki/Linux%E5%86%85%E6%A0%B8     PS:     沒有永遠不會當機的系統:     只有Windows會藍屏嗎?不     我們偉大的MAC(UNIX),有四國語言的當機畫面,     而LINUX則是有內核錯誤(Kernel panic)。 二、Linux檔案系統(File System)     Windows有所謂的FAT16、FAT32、NTFS,當然LINUX也不例外,     LINUX從一開始的EXT2->EXT3演進到目前的主流EXT4,     以及一些更加先進的FileSystem如:ZFS、XFS、BTRFS等等,     也如同Windows一樣,你可以自行更換FileSystem,只是是比較大的工程,     如果有興趣的話,可以參考其他的相關資料進行研究。     Ref:        http://linux.vbird.org/linux_basic/0230filesystem.php#harddisk        Linux 檔案格式 ext2 ext3 ext4 比較 三、Linux目錄結構...

Linux vs Windows

一、What is Linux?     毫無反應,就是一隻企鵝(誤     好,不開玩笑了,其實Linux是根據是一種自由和開放原始碼的類UNIX作業系統。     而UNIX也是一種電腦作業系統,具有多工、多用戶的特徵。     像是FeeeBSD、MAC都是UNIX系統的代表。( UNIX = FreeBSD、MAC) 二、POSIX     說到Linux,一定要提到相關的POSIX,而 POSIX = UNIX + LINUX,     想要了解更多的可以去看一下維基百科。     POSIX Ref:      https://zh.wikipedia.org/wiki/POSIX 三、Linux Family     Linux家族的家族樹(Family Tree):       1.Debian家族(Debian, Ubuntu(桌面使用者較多), Linux Mint)       2.Fedora家族(               Fedora(最多新功能、RedHat的測試實驗所),               RedHat Enterprise Linux,               CentOS(模仿RedHat Enterprise Linux所做出來的版本,相對較穩定))       3.OpenSUSE     PS: 在各個Linux版本當中,有些時候我們會發現有所謂的LTS版本,     LTS就是所謂的LongTerm Service版本,該版本會提供比一般正式版本更長的後續維護,     像是臭蟲的修正以及其他更新等等的,...

Virtualbox OVA匯出匯入

圖片
其實很簡單,這邊只是帶大家做一遍而已。 匯出步驟: 一、首先要先將機器關機後才可以正常的匯出

CentOS 7 最小安裝後在VirtualBox的網路設定筆記

圖片
如題,大家也可以參考這些網誌的內容來進行設定: http://www.unixarena.com/2015/04/rhel-7-network-management-nmcli-or-nmtui.html http://www.arthurtoday.com/2013/07/ubuntu-guest-enables-nat-and-hostonly-adapter.html 首先,先說明一下Virtualbox如果只是要讓VM可以連到外部網路,而不需要連線到實體本機的話,那麼直接用他預設的NAT就可以達成了; 而如果是只要讓VM連到實體本機,不讓VM連到外網的話,則是可以使用「僅限主機」介面卡達成。 而一般如果要讓VM跟實體機都在同網段的話,那麼應該要選擇「橋接介面卡」,那麼如果有DHCP Server的話(一般而言,應該就是無線基地台、IP分享器),那麼就可以在同網段,你可以跟你的VM互通,也可以讓他連線到外部網路,就跟你的實體本機一樣。 因此,如果你想要達成讓VM跟實體機可以互連的話,「橋接介面卡」就是一種方法,另一種方法是讓VM有兩張網路介面卡,一張是NAT,另一張則是「僅限主機」介面卡,設定好兩張介面卡後,那麼VM也就可以連內也可以連外,只是嚴格說起來,他跟實體本機並不是在同一個LAN上面就是了。 下面的例子,是使用第二種方式,也就是NAT+僅限主機介面卡來進行設定教學,我會先教如何進行Virtualbox開虛擬機的設定,再教說如何在CentOS 7 進行相關的設定,那麼就讓我們開始吧!