【问题标题】:NTier Design with EFNTier 设计与 EF
【发布时间】:2014-03-04 19:10:35
【问题描述】:

我有以下 n 层设计。

按降序排列可以看到什么:

查看> 视图模型> 业务逻辑层> 数据访问层(存储库)

目前,视图模型使用业务对象执行一些高级操作(向数据库添加一些内容),而 BLL 使用 DAL 执行低级操作。 DAL 仅具有简单的原子操作(CRUD 操作),而 BLL 使用工作单元模式来完成更高级别的业务操作,可能需要访问不同的存储库等。因此执行这些操作的业务逻辑存在于 BLL 中.

我的问题是,现在我在思考我的模型会是什么时遇到问题。由于我使用的是实体框架,所以我的业务模型基本上是我的 EF 实体。每个人都告诉我,业务逻辑应该放在模型中。如果这是真的,那么如果每个模型都包含单独的业务逻辑,那么业务逻辑层的意义何在?我觉得我有两个领域我有“业务逻辑”。

我将如何向我的 EF 实体添加业务逻辑,因为我没有使用代码优先,并且当我更改我的 .edmx 时会重新创建实体。

谢谢。

【问题讨论】:

    标签: wpf entity-framework n-tier-architecture


    【解决方案1】:

    要回答您的第二个问题,EF 类被标记为“部分”,这意味着您可以创建一个新文件(在同一个程序集中),将另一个与生成的类同名的“部分”类放入其中,然后编译器的行为就像新文件中的代码存在于生成的代码中一样。

    第一个问题更复杂,我会把业务逻辑放在最有意义的地方。如果它与特定实体有关,则使其成为上述部分类的一部分。如果它必须与多个实体交互、处理其他来源等,它可能应该放在自己的类中。复制代码几乎从来都不是正确的答案。

    请注意,在我看来,“模型”是 MVVM 中的底层业务逻辑和数据。这并不一定意味着它只存在于数据对象中,或者全部存在于一个对象中。它只是简单地与 View 和 ViewModel 对象分开。

    【讨论】:

    • 这很有意义。不能同意更多关于重复。我现在的设计是视图模型使用BLL提交模型,BLL在使用DAL提交模型之前做业务逻辑,因为不同模型之间有很多交互,所以我觉得会是很难仅在 1 个模型中进行所有验证。感谢您的指导!
    猜你喜欢
    • 2014-05-24
    • 2019-09-04
    • 2015-11-25
    • 1970-01-01
    • 2011-03-29
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多