2013-06-27 2 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

Как общее правило, чем меньше переменных членов, тем лучше! Существует школа мысли, что все объекты попадают в одну из двух категорий: те, которые управляют временем жизни одного значения, и те, которые управляют взаимодействием двух значений. Следуя этому принципу до крайности, это приведет к объектам, у которых никогда не было более двух переменных-членов. – MattDavey

ответ

1

Не обязательно, существует концепция в Domain Driven Design того, что называется «стандартным типом». Это действительно базовый примитив, завернутый в класс объектов. Идея состоит в том, что примитив не содержит информации о том, какую информацию он содержит, это просто строка/int/что угодно. Таким образом, говоря, что объект, который окружает примитив и гарантирует, что он всегда действителен, гарантирует, что объект имеет значение далеко за пределы только примитива, который он содержит, например. Имя - это не просто строка, это имя.

Вот пример, взятый из комментариев Velocity

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 [объект 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 & е = pnbMUZioMaPQ7AbxhoHIDw & USG = AFQjCNFNSHFqJKUMFLkjtH9QKMQILPfGaA & Sig2 = jSy99GkMi1sRQ1UId_djmA & BVM = bv.48340889, bs.1, d.d2k) делает большую работу, объясняя эту концепцию в Правилу3: Wrap все примитивы и строки. – MattDavey

+0

+1 еще. Сильные типы предотвращают ошибки, когда вы пытаетесь использовать две несовместимые ценности, которые имеют общий примитивный тип. Например, если у вас есть «int rowsPerScreen»; и «int milesPerHour;», утверждение типа «distance = rowsPerScreen» milesPerHour; » синтаксически и математически справедливо, но семантически бессмысленно. Если вы строго набрали их как «ScreenRows rowsPerScreen»; и «Velocity milesPerHour»; вы никогда не смогли бы совершить эту ошибку. –