【问题标题】:Multiple class instantiation or change public property in ASP.NET MVCASP.NET MVC 中的多个类实例化或更改公共属性
【发布时间】:2014-08-04 13:02:25
【问题描述】:

我需要使用不同的构造函数访问我的业务层对象 4 次。

具体来说,我需要通过我单独的数据访问层访问 4 个不同的后端系统

我该怎么办:

1) 用不同的构造函数实例化 4 个独立的对象?

2) 实例化一个对象,每次都改变公共属性?

因为我现在在我的 HomeController 中,所以我有以下内容:

var obj = new BarcodeBLL(new ERPConfig
{
    AS400ControlLibrary = ConfigurationManager.AppSettings["ControlLibrary"],
    AS400Library = ConfigurationManager.AppSettings["DataLibrary"],
    ConnectionString = ConfigurationManager.ConnectionStrings["AS400"].ConnectionString
});

对我来说,遵循 #2 似乎很明显,但我想知道我是否正确以及为什么

【问题讨论】:

  • 你说的“……而且每次都改变公共财产”是什么意思?
  • 由于唯一能让我到达正确数据层的是连接字符串,我的意思是能够以某种方式更改连接字符串并允许业务层到达正确的服务器。
  • 那么,您是说您有 4 个相同的系统可以通过不同的连接字符串访问?
  • 是的,我有 4 个 AS400 系统(非 unicode),我可以通过不同的连接字符串访问它们。

标签: c# asp.net-mvc oop


【解决方案1】:

如果您有 4 个相同的系统,那么用一个类来表示这些系统似乎是合乎逻辑的。当您需要访问其中一个系统时,您可以实例化此类型,将正确的连接字符串传递给构造函数。

您可能希望隐藏在工厂后面或 DI 容器配置中实际使用的连接字符串的详细信息。

【讨论】:

  • 我需要能够连续运行 4 次相同的 DAL 方法。我应该有一个对象还是 4 个?
  • 你应该有 4 个对象。如果你只有一个对象,那个对象到底代表什么?它会违反单一责任原则吗(它可能会或可能不会,取决于 4 个系统如何变化)?另一方面,如果您只是调用这个方法,您可能需要一个(可能)静态方法,将连接字符串与其余所需参数一起传递。如果不了解更多关于您的设置,真的很难说您应该朝哪个方向发展。
  • 这 4 个系统是相同的,并且它们具有相同的变更管理例程。它不是我必须调用的一种方法,有很多方法。我认为 4 个对象是要走的路,我想知道这在资源方面有多昂贵
  • 除非您在一个紧密的循环中执行此操作,否则实例化 4 个简单对象并在 web.config 中查找一些信息的成本可以忽略不计。如果你在类型的构造函数中做各种昂贵的工作,那当然是另一回事了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多