【问题标题】:Entity Framework Decorator Pattern实体框架装饰器模式
【发布时间】:2010-06-15 18:29:01
【问题描述】:

在我的业务范围内,我们有产品。用户可以通过向它们添加修改来修改这些产品。修改可以做一些事情,例如改变产品的价格和属性。在我看来,这似乎完全符合装饰者模式

现在,设想一个数据库,其中产品存在于一个表中,修改存在于另一个表中,并且该数据库通过实体框架连接到我的应用程序。如何让 Product 对象和 Modification 对象实现相同的接口,以便可以互换使用它们?

例如,我希望能够做的事情: 给定一个 Modification 对象,调用 .GetNumThings(),它将返回原始对象中的事物数量,加上或减去修改添加的事物的数量。

这个问题可能源于严重缺乏对 EF 本质的了解(到目前为止,我的所有经验都是非常简单的 LOB Silverlight 应用程序),如果是这种情况,请随时告诉我RTFM。

提前致谢!

编辑: 如果给定第三个表,将产品链接到修改(一对多)它可以重建装饰对象(我意识到这可能超出 EF 自动执行的范围),那也会很好。你会如何建议这样做,该代码将驻留在哪里?它是 EF 类的一部分,还是我从数据库收到的每个实体都需要通过某种“构建器”来从 Product 及其修改列表构造一个装饰对象?

【问题讨论】:

    标签: c# entity-framework interface decorator


    【解决方案1】:

    我不完全确定我是否正确理解了您的问题,但这里是:您可以为 EF 模型中定义的那些创建部分类。您可以定义一个通用接口并使用部分类来实现该接口。

    例如:

    public interface IProduct{
       public int GetNumThings();
    }
    
    public partial class Product : IProduct{
    
       public int GetNumThings()
       {
       ...
       }
    }
    
    public partial class Modification: IProduct{
       public int GetNumThings()
       {
       ...
       }
    }
    

    【讨论】:

    • 这就解决了需要两者实现同一个接口的问题。有什么可以阻止 IProduct 接口包含 IProduct 类型的属性吗?
    • @Anthony Compton:不,您也可以使用数据库中包含的参考资料。毕竟看起来无论如何都需要存储产品和装饰器之间的引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多