что-то вроде интерфейса - PullRequest
0 голосов
/ 19 марта 2012

мы хотим использовать интерфейс типа sometihng для принудительной записи некоторых статических методов (создать, удалить, обновить). Что мы можем использовать как интерфейс, но можем использовать статические методы

edit: у нас есть проект, и мы используем entityФреймворк для DAL. Например, таблица Product. Мы думаем, что создаем класс PruductDAL и добавляем метод Create (Product product), метод Update (Product product), метод Delete (int id) и метод GetById (int id). И мы думаем, что создаем статические методы.не используйте new ProductDAL () и не создавайте экземпляр класса .Just Product.Create (product).

Мы пишем код с 4-5 людьми, и я думаю, что мы должны заставить всех писать класс, содержащий методы crud.

Каким путем мы должны следовать?

Ответы [ 4 ]

1 голос
/ 19 марта 2012

Я предполагаю, что вы хотите заставить дочерний класс реализовать некоторые статические методы.

Я не думаю, что это правильная концепция ОО, и в основном у вас есть проблемы в вашем дизайне.Но если вы действительно хотите это сделать.у вас может быть базовый класс, который использует отражение, чтобы проверить, определяет ли клиентский класс статические методы, которые вам нужны, и выдать ошибку времени выполнения.Это невозможно сделать во время компиляции.

Но, тем не менее, ваше требование пахнет плохим дизайном.

0 голосов
/ 19 марта 2012

Не делайте свой DAL, используя статические методы.Я всегда создавал классы EntityFramework DAL в качестве оберток вокруг моего EntityContext и реализовывал там все мои LINQ и Lambdas.EntityContext создается в моем конструкторе класса DAL, и я избавляюсь от EntityContext в моих классах DAL Dispose ().Каждый запрос реализован в отдельном методе и возвращает IQuerable, поэтому я могу связывать запросы.Затем я могу использовать свой DAL в своем бизнес-коде следующим образом:

using(IMyContext context = new MyContext())
{
    IQueryable<User> query = context.RetrieveUsersByRole("Software Developers");

    List<User> developerUsers = query.ToList(); // Query gets executed here

    foreach(User dev in developerUsers)
        dev.Salary = 100000000;

    context.SaveChanges()
}

Это не совсем DDD, но оно обеспечивает разделение между EntityFramework и бизнес-логикой и позволяет повторно использовать / связывать запросы.Статики нет (я редко использую статические классы / методы).

РЕДАКТИРОВАТЬ: Это подход в стиле Unit of Work, а не подход CRUD / Repository.

0 голосов
/ 19 марта 2012
class EnsureStaticMethodsGetWritten
{
  Action ensure1 = ThatStaticClass.BetterImplementThis;
  Func<Customer, bool> ensure2 = ThatStaticClass.BetterImplementThisToo;
}

Этот класс не будет компилироваться до тех пор, пока у ThatStaticClass не появятся эти методы.

0 голосов
/ 19 марта 2012
Элемент

Static не является частью экземпляра , а типа , поэтому вы не можете делать то, что хотите, в ООП.

Если вы хотите «заставить» писать статические методы, используйте static class, но вы теряете возможность наследования. static method, в моем видении кода, когда я его вижу, является сигналом вещи без состояния . Таким образом, использование static class, если набор статических методов действительно является тем, что вы хотите получить, может быть доступным решением для вас.

Есть, конечно, и очевидное решение: поговорить с людьми и определить цели дизайна.

Надеюсь, это поможет.

...