【发布时间】:2012-02-13 23:50:34
【问题描述】:
我正在开发一个相当简单的多层应用程序(WPF、WCF、EF 4 和 SQL)。就架构而言,我们计划包含一个“通用”项目,其中将包括实体和服务合同。
将实体和服务合同放在单独的程序集中有什么优点/缺点?还是将它们放在一起通常很好?
我很想听听别人的意见。
谢谢!
【问题讨论】:
标签: c# wcf entity-framework architecture
我正在开发一个相当简单的多层应用程序(WPF、WCF、EF 4 和 SQL)。就架构而言,我们计划包含一个“通用”项目,其中将包括实体和服务合同。
将实体和服务合同放在单独的程序集中有什么优点/缺点?还是将它们放在一起通常很好?
我很想听听别人的意见。
谢谢!
【问题讨论】:
标签: c# wcf entity-framework architecture
在单独的程序集中拥有合同,通过将合同程序集提供给开发人员,您可以通过将合同程序集注入到不同程序集中的不同实体,他将实现它并为您提供一个 dll,您可以将其放入项目文件夹并使用 IoC 框架(如 StructureMap)注入其中,无需重建,
将合同放在包含实体的同一程序集中,将合同与实现联系起来......
【讨论】:
如果您与其他 .NET 平台使用者一起使用 RESTful 架构 - 将服务合同放在单独的程序集中(共享)会很有帮助,这样您就可以轻松地与 RESTful 使用者共享您的操作和数据合同,而不会暴露任何不必要的数据访问您的客户的组件。
因此,我建议您将数据访问和服务合同隔离开来。
【讨论】:
这正是我为我设计的电子商务 n 层应用程序构建设计的方式。
有两个通用库 - 一个用于 DTO,另一个用于接口。
然后客户端和服务器包含这些库,并使用通用类型生成服务代理。
这里的主要优点是易于编译 - 更改接口时无需重新创建代理,客户端和服务器会自动更新。
我还有一个实用程序应用程序,其中包含我需要的所有帮助类型的东西。
编辑:抱歉,请重新阅读您的问题。就我而言,我有多个接口库 - 一个用于工作流库(具有组合接口),另一个用于服务(组合成工作流操作的东西)
所以在我的情况下,将它们分开是有意义的。
如果您只有一组接口,并且这些接口都使用您的 DTO,则没有理由将它们分成两个库 - 一个就足够了。考虑一下,如果您将来可能需要在更多接口库之间共享您的 DTO,在这种情况下,请从一开始就将 DTO 与接口分开。
【讨论】: