2013-06-27 20 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;”你永远不会犯那个错误。 –

相关问题