2013-06-27 52 views
2

我目前正在使用MVC模式做一個簡單的待辦事項列表程序,因此有一個筆記本模型類。但是,由於成員數量非常少,因此某些事情會「失去」。類中的成員數量很少被認爲是代碼異味?

筆記本由類別組成,它們由待辦事項列表組成,待辦事項列表由項目組成。

我不能放置的是這是一個不好的分析(例如,有更多的成員和責任,我只是想念他們..)或者也許是代碼氣味,類是不需要的(在這種情況下,我是不知道該怎麼辦,因爲我可以在該控制器中擁有一個類別列表,但是我沒有建立一個似乎不對的筆記本實體)。

下面是一個非常簡單的類,我有:

class Notebook 
{ 
    private String title; 
    private List<Category> categories; 

    public Notebook(String title, List<Category> categories) 
    { 
    } 

    public void setCategories(List<Category> categories) 
    { 
    } 

    public List<Category> getCategories() 
    { 
    } 
} 

我經常有這樣的問題,即它的感覺就像我對於它的緣故使類和他們有一個非常一批成員/責任,所以我很高興知道我是否無理由強調。

+1

的意見作爲一個一般的經驗法則,越少的成員變量的更好的例子!有一個思想流派認爲,所有對象都屬於兩類:管理單一價值的生命週期的管理對象,以及管理兩種價值互動的管理對象。遵循這個原則到極端會導致永遠不會有超過2個成員變量的對象。 – MattDavey

回答

1

不一定,所謂的「標準類型」是域驅動設計中的概念。這實際上是一個包裝在對象類中的基本原語。這個想法是,該原語不包含它包含的信息的信息,它只是一個字符串/ int /任何。因此,通過說出圍繞該原語的對象並確保其始終有效,可確保該對象的含義遠遠超出其包含的原語的意義。名稱不只是一個字符串,它是一個名稱。

下面是從速度

public class Velocity 
{ 
    private readonly decimal _velocityInKPH; 

    public static Velocity VelocityFromMPH(decimal mph) 
    { 
     return new Velocity(toKph(mph)); 
    } 

    private Velocity(decimal kph) 
    { 
     this._velocityInKPH = kph; 
    } 

    public decimal Kph 
    { 
     get{ return this._velocityInKPH; } 
    } 

    public decimal Mph 
    { 
     get{ return toMph(this._velocityInKPH); } 
    } 

    // equals addition subtraction operators etc. 

    private static decimal ToMph(decimal kph){ // conversion code } 
    private static decimal ToKph(decimal mph){ // conversion code } 
} 
+0

+1 [object calisthenics](https://www.google.co.uk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC8QFjAA&url=http%3A%2F%2Fwww.xpteam.com% 2Fjeff%2Fwritings%2Fobjectcalisthenics.rtf&ei = pnbMUZioMaPQ7AbxhoHIDw&usg = AFQjCNFNSHFqJKUMFLkjtH9QKMQILPfGaA&sig2 = jSy99GkMi1sRQ1UId_djmA&bvm = bv.48340889,bs.1,d.d2k)在規則3:包裝所有基元和字符串中做了很好的解釋。 – MattDavey

+0

+1。如果您嘗試使用兩個共享基本類型的不兼容值,則強類型可防止出現錯誤。例如,如果你有「int rowsPerScreen;」和「int milesPerHour;」等語句,如「distance = rowsPerScreen * milesPerHour;」在語法和數學上是有效的,但語義上沒有意義。如果您強烈地將它們鍵入爲「ScreenRows rowsPerScreen;」和「Velocity milesPerHour;」你永遠不會犯那個錯誤。 –

相關問題