C# 在MVC web应用程序中,让多个web应用程序使用公共控制器库是一种不好的做法吗?
目前,我们正在创建一套前端web应用程序,这些应用程序共享许多视图/控制器。将这些公共控制器和视图放在共享项目中是否不好。我们使用的是夏普体系结构。为什么认为将普通事物集中化是不好的?看看替代方案。在许多地方复制相同的东西会有什么好处 这几乎是对@Arjang的直接回应。“什么时候集中处理公共事务不好?” 对于这个答案,我将使用以下用例。Jeff的Widget Supply是一家拥有电子商务店面的公司。它们有以下正在使用的应用程序:C# 在MVC web应用程序中,让多个web应用程序使用公共控制器库是一种不好的做法吗?,c#,asp.net-mvc,C#,Asp.net Mvc,目前,我们正在创建一套前端web应用程序,这些应用程序共享许多视图/控制器。将这些公共控制器和视图放在共享项目中是否不好。我们使用的是夏普体系结构。为什么认为将普通事物集中化是不好的?看看替代方案。在许多地方复制相同的东西会有什么好处 这几乎是对@Arjang的直接回应。“什么时候集中处理公共事务不好?” 对于这个答案,我将使用以下用例。Jeff的Widget Supply是一家拥有电子商务店面的公司。它们有以下正在使用的应用程序: 公共电子商务网站 内联网电子商务管理员 用于供应商集成的数据仓
- 内部网站点位于VPN内部,需要特殊的服务器配置
- 供应商应用程序需要支持附件
- 内部网电子商务应用程序需要支持设置优先级
MailMessage mail = new MailMessage();
mail.To = "anaddress@email.com";
mailFrom = "anaddress@email.com";
mail.Subject = "growsize@spam.com;
mail.Body = "lies";
SmtpMail.SmtpServer = "localhost";
SmtpMail.Send(mail);
所以Joe Schmoe developer说:“我知道,由于所有这些应用程序都具有相同的功能,我将把电子邮件代码放在JeffWidget.Core库中,我们将使用相同的代码发送电子邮件!”
然后Joe添加了一个新的配置部分,这样VPN就可以获得特殊的访问权限,每个人都可以用同样的方式配置电子邮件发送者。然后,他添加了一种基于文本的电子邮件方法。然后,他添加了一种包含附件的方法。然后,他添加了一种设置优先级的方法。然后有人需要一种方法来添加抄送和密件抄送。然后其中一个应用程序需要一种特殊的方式来记录电子邮件。然后有人需要添加一个与营销数据库集成的时事通讯系统。然后,然后,然后
现在Joe是一个很棒的程序员,他已经尽了最大的努力,但是因为所有的应用程序都使用同一个电子邮件发送者,所以为了共享一点微不足道的功能,他将整个应用程序集紧密地耦合在一起
依我看,这比用一个重复的类和十几行代码来发送电子邮件要糟糕得多。耦合将在同一套件或业务域中的应用程序之间发生,但这种耦合通常通过数据发生。客户在所有应用程序中都是同一客户,但这是否意味着其行为方式相同?有没有真正的继承权
问题在于,当每个使用者只调用共享功能的一小部分时,共享代码的长度是否小于其片段的总和。它就像Liskov替换原则一样,只是在更大的范围内严重损害了您的项目敏捷性
Greg Young在他的一次演讲中更好地解释了其中的一些事情:
只要你不过度,这是一个很好的做法。我在公共库中设置了视图/控制器。维护共享功能要容易得多,每个web应用程序的代码也要干净得多。我还可以通过引用公共库快速建立一个新的web应用程序 您需要做几件事来确保不会从消费web应用程序中拿走任何东西:
- 使用基本控制器类,而不是单独的控制器,并使所有操作方法都是虚拟的
- 确保文件系统中存在的视图将覆盖库中嵌入的视图