【发布时间】:2014-07-12 03:24:39
【问题描述】:
我在 Github 上有一个我正在尝试开发的项目,该项目展示了如何以实用的方式使用最佳实践。但是我对这些概念有疑问。当我这样做时,我会回到基础并尝试一个简单的例子。要查看该项目,请点击此链接:
https://github.com/franasm/Store.git
工作分支的 DI/IOC 完全正常工作。当我尝试添加一个简单的业务层时,发生了损坏的分支。所以我回到了基础。
我创建了一个沼泽标准的简单 MVC4 应用程序。 然后我添加了带有单个表的 EF5(上面项目中的产品表)。
我决定添加一个没有任何 DI/IOC 或任何花哨的东西的业务层。但是这个概念让我很困惑。
在这个例子中,我想做的就是创建一个扩展产品类的类,添加一个名为 TaxAmt 的属性,并在实例化该类时添加一个计算 TaxAmt 的方法。
我尝试了各种方法,但得到了各种错误。从堆栈溢出异常,到实例未设置异常。大多数情况下,该事物只是不显示值,因为 Product.Price 字段未初始化。
我也发现我的BL放错地方了:
我有我的模型,
然后是我的 BL,
然后是我的控制器。
这个小例子很好。但是因为我能得到的最接近工作示例的是创建由 EF 生成的现有类的部分类,所以当我将其拆分为使用 DI/IOC 时,BL 将位于接口的错误一侧,因为它将是模型类(部分类)的一部分。
我希望我的图层清晰分开,例如:
EF 模型类,
接口,
回购,
BL,
控制器,
视图模型,
意见。
因为 Repo 负责 crud 操作。 BL 应该以此为基础。在读取产品详细信息(其中一个是价格)后,BL 可以获取此信息,进行税收计算,然后控制器可以使用此信息。
我不确定我的想法是否正确。
在大多数情况下,我非常不同意 BL 应该是模型的一部分。但是,即使对于我上面描述的人为示例来说就是这种情况。我仍然无法让它工作。然而,我正在寻找一个解决方案,它着眼于继承模型类,扩展它,然后将它与 repo 一起使用。但这又让我陷入了困境。 crud 由 repo 层完成,它无法访问 BL,那么 BL 如何初始化以进行税收计算。我不是加倍对象,每个模型实例的 POCO,然后也是同一对象的 BL 实例。
我真的很困惑...
基本上,我没有包含代码,因为我实际上所做的只是创建一个简单的表、一个简单的 mvc 项目、添加 EF5 模型、将它们全部连接起来以执行 crud 操作并确保它正常工作。然后尝试按照描述添加 BL。 BL 文件夹中的单个类,要么被定义为模型的部分类(不理想),要么直接继承模型类(也不确定这是否很酷)。理想情况下,我希望能够使用 DI,将我的 repo 注入我的 BL,然后将我的 BL 注入我的控制器。
如果有人知道如何执行此操作,您能否通过提供分步说明(最好是一些示例代码)或解释如何执行此过程以及我为什么会这样来向我提供答案困惑。
提前感谢您的帮助。
【问题讨论】:
标签: asp.net-mvc entity-framework asp.net-mvc-4 dependency-injection business-logic-layer