Как определить шаблон более свободно, чем интерфейсы в C # - PullRequest
3 голосов
/ 30 декабря 2010

Скажем, у меня есть группа классов, которые генерируют документы из шаблонов. Например ...

class CustomerInvoice
{
    public satic string TemplatePath 
    { 
        get { return @"C:\Templates\InvoiceTemplate.doc"; }
    }

    public static DocumentType DocumentType 
    { 
        get { return DocumentType.WordDocument; }
    }

    public static void Create(Customer customer, int orderNumber)
    {
         //...
    }
}

Все эти классы имеют один и тот же метод имена , но не обязательно метод подписи .

Например, у меня может быть

CustomerInvoice.Create(Customer customer, int orderNumber);
DespatchNote.Create(Customer customer, int orderNumber, Warehouse warehouse);
PackingLabel.Create(int orderNumber);

... или что-то еще (изо всех сил пытается придумать разумные примеры).

Есть ли в ОО механизм, который определяет, какие имена методов группа классов имеет таким образом? Я действительно думаю о том, чтобы просто иметь способ обеспечить последовательную реализацию и именовать группу похожих объектов, чтобы они были более понятными для потребителей. Будет ли такой случай считаться действительным / стоящим использованием любой такой техники?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2010

Нет, для этого нет конструкции.Статические методы , в частности , никак не навязывают общности.Если это был интерфейс, вы могли бы иметь что-то вроде Create(object) или Create(T) (для некоторого T, определенного в универсальном интерфейсе) и принять один параметр для представления состояния te.

2 голосов
/ 06 января 2011

согласованная реализация и присвоение имен группе одинаковых объектов, что делает их более интуитивно понятными для потребителей

Поскольку речь идет об обеспечении публичного интерфейсаВаш API соответствует определенной системе, я не думаю, что обязательно будут какие-либо ООП-конструкции, которые помогут.

Однако может помочь любой из инструментов, предназначенных для управления стиль и дизайн .Я думаю о таких вещах, как StyleCop, FxCop и NDepend, которые позволяют создавать собственные правила (с разной степенью боли!).В частности, NDepend позволит вам установить правило языка запросов кода в соответствии с

WARN IF Count == 0 IN SELECT METHODS WHERE NameIs "Create" AND IsStatic

, которое (примененное к подходящему пространству имен) будет предупреждать, если какой-либо конкретный класс не имеет статического метода (любая подпись) с именем Create

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...