【发布时间】:2014-10-12 05:36:38
【问题描述】:
我有以下 dll 的应用程序:
Web 项目 - MVC Web 应用程序
Wcf 服务 - Web 应用程序使用的服务。
模型 - 实体框架代码优先实体和 DbContext 对象。
现在,当我需要更改某些内容时,可以说 wcf 服务中的功能,因此我更改了功能,但 Web 也受到影响,我需要再次添加服务引用并更改使用 wcf 服务的代码以及模型有时变化...
正如 CCP 所说:更改包的理由不应该超过一个。如果更改发生在依赖于多个包的应用程序中,理想情况下,我们只希望更改发生在一个包中,而不是多个包中。 这有助于我们确定可能更改的类,并将它们打包在一起,原因相同。如果类是紧耦合的,请将它们放在同一个包中。
所以在我的设计中我违反了这个原则?如果有人能解释更好的设计,我会很高兴。
【问题讨论】:
-
这是一个常见的解决方案结构,是的,它会违反这个原则。另一种方法是将每个关注点(比如说管理用户)放在一起——这将包括模型、存储库、控制器……但我认为在.net 中,你所做的“层”模型仍然是最常见的模型,所以坚持与它国际海事组织
-
显然,无论何时更改接口,都必须更改其实现以及调用者使用它的方式。
-
你说得对,这违反了 CCP,因为一个 dll 的变化会导致其他 dll 的变化......我的问题是有更好的设计,如果没有,我们需要在什么情况下使用 CPP 原则?
-
CCP 原则是指horizontal 包内聚,而不是垂直内聚,即将通用功能拆分为多个单独的包,供同一个调用者使用。如果您的包依赖于多个包,那么您应该只需要更改一个,前提是您要更改一个功能。如果您需要添加涉及新数据架构、新业务逻辑和新表示的新功能,当然您将在应用程序周围进行更改。
标签: c# .net design-patterns package-design