Я несколько смущен о абзаце в полной книге кода.Классы, которых следует избегать (код завершен)
В разделе «Классы, чтобы избежать» гласит:.
«Избегайте классов с именем после глаголов класса, который имеет только поведение, но нет данных, как правило, на самом деле не класс Рассмотрим поворота класс как DatabaseInitialization() или StringBuilder() в подпрограмму в каком-то другом классе «
Мой код в основном состоит из классов глаголов без данных. Есть invoicereaders, pricecalculators, messagebuilders и т. Д. Я делаю это, чтобы сосредоточить классы на одной задаче каждый. Затем я добавляю зависимости к другим классам для других функций.
Если я понимаю, этот пункт правильно, я должен использовать код, как
class Webservice : IInvoiceReader, IArticleReader {
public IList<Invoice> GetInvoices();
public IList<Article> GetArticles();
}
вместо
class InvoiceReader : IInvoiceReader {
public InvoiceReader(IDataProvider dataProvider);
public IList<Invoice> GetInvoices();
}
class ArticleReader : IArticleReader {
public ArticleReader(IDataProvider dataProvider);
public IList<Article> GetArticles();
}
Изменить Спасибо за все ответы.
Мое заключение состоит в том, что мой текущий код больше SRP, чем OO, но он также страдает от «модели анемичного домена».
Я уверен, что эти идеи помогут мне в будущем.
Я согласен с Торариной. Классы существуют, чтобы что-то делать. В противном случае они просто «строят» с претензиями. – kdgregory
Собственно, 'InvoiceReader' и' ArticleReader' в этом конкретном примере имеют некоторое состояние (частное поле 'dataProvider'). – Groo
это, конечно же, чистый подход OO, функторы, которые вы предпочли бы глагол для (поскольку они притворяются функциями первого класса) и, возможно, некоторые статические классы –