当然。在 Visual Studio 中的解决方案中,您可以添加一个类库项目并用您想要的所有可重用代码填充它。然后解决方案中的任何项目都可以通过向该项目添加项目引用来引用它。
请注意,在这样的事情上很容易过火。举个例子,你的例子:
MessageBox.Show("Hi");
该类MessageBox
与用户界面紧密耦合。所以它属于用户界面对象。(本例中的表单。)这是因为如果您尝试在类库中使用它,那么您需要将用户界面库添加到该类库,使其与特定用户界面实现更紧密地耦合。这使得类库的可移植性和可重用性大大降低,因为它只能由具有相同用户界面技术的项目使用。(例如,不能被 Web 项目使用。)
因此,您需要考虑将每个通用实用程序封装到其自己的可重用代码中。它是否属于 UI、业务对象、数据访问等?如果它与特定的外围技术(用户界面技术、数据访问技术等)紧密耦合,那么它可能属于那里。
一种方法是拥有多个“通用实用程序”库。使用人为的命名方案,一个更大的企业域解决方案可能有这样的项目:
- Domain.BusinessLogic(类库,一切都引用)
- Application.Forms.AdminPanel(表单应用程序)
- Application.Forms.OperationsPanel(表单应用程序)
- Application.Forms.Common(类库,其他 Forms 应用程序引用)
- Application.Web.PublicWebsite(网络应用程序)
- Application.Web.Common(类库,其他 Web 应用程序引用)
- Infrastructure.DataAccess.SQLServer(类库,依赖注入到域中)
- Infrastructure.Vendor.SomeService(类库,依赖注入到域中)
- 等等
因此,您有一个核心业务逻辑项目,其中包含对您正在工作的整个业务领域通用的任何内容。它应该没有依赖关系。(不依赖于用户界面、数据库、框架等)然后你有各种技术的应用程序,其中包含具有应用程序耦合的通用功能的混合类库。最后,您拥有域的另一个外围,即后端依赖项。这些可能是您的数据访问层、与第三方系统和服务的集成等。
由于任何给定的功能都被抽象为通用实用程序以减少重复并增加重用,因此请注意保持代码耦合较低,以免“通用实用程序”与“不常见的依赖项”紧密绑定。在行业中,与代码重用的紧密耦合经常会增加。(请参阅单一职责原则。)因此,请运用良好的判断力来避免这种情况。
如果它服务于多个职责并且这些职责不应该混合,那么多次编写相同的代码(仅通过击键就“相同”,不一定是概念目的)并没有本质上的错误。