像Interface这样的东西

时间:2012-03-18 20:33:51

标签: c# interface static-methods

我们希望使用sometihng like force来强制编写一些静态方法(创建,删除,更新)。我们可以像接口一样使用但可以使用静态方法

编辑:我们有项目,我们使用DAL的实体框架。例如产品表。我们认为我们创建PruductDAL类,我们添加Create(产品产品)方法Update(产品产品)方法Delete(int id)方法和GetById (int id)method.And我们认为创建静态方法不要使用新的ProductDAL(),也不要创建类的实例.Just Product.Create(product)。

我们用4-5人代码,我认为我们必须强制每个人写一个包含crud方法的类。

我们必须遵循哪种方式?

4 个答案:

答案 0 :(得分:1)

我假设你想强制子类实现一些静态方法。

我不认为这是一个正确的OO概念,而且大多数情况下您的设计存在问题。但如果你真的想这样做。你可以有一个基类,使用反射来检查客户端类是否定义了你需要的静态方法并抛出运行时错误。在编译时没有办法做到这一点。

但是,你的要求仍然闻起来很糟糕。

答案 1 :(得分:0)

Static成员不参与实例,而是参与类型,因此您无法以OOP方式执行所需操作。

如果要“强制”编写静态方法,请使用static class,但是会遗漏继承功能。在我看到代码的时候,static method无状态内容的信号。因此,使用static class,如果静态方法的集合实际上是您想要的,那么对您来说可能是经济实惠的解决方案。

当然,还有一个明显的解决方案:与人们交谈并定义设计目标。

希望这有帮助。

答案 2 :(得分:0)

class EnsureStaticMethodsGetWritten
{
  Action ensure1 = ThatStaticClass.BetterImplementThis;
  Func<Customer, bool> ensure2 = ThatStaticClass.BetterImplementThisToo;
}

ThatStaticClass具有这些方法之前,此类不会编译。

答案 3 :(得分:0)

不要使用静态方法制作DAL。我总是创建EntityFramework DAL类作为我的EntityContext周围的包装器,并在那里实现我的所有LINQ和Lambdas。 EntityContext在我的DAL类构造函数中创建,我在我的DAL类Dispose()中处理EntityContext。每个查询都以单独的方法实现,并返回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和业务逻辑之间的分离,并允许查询可重用/链接。没有静态(我很少使用静态类/方法)。

编辑:这是单元工作方式方法,而不是CRUD /存储库方式。