gpt4 book ai didi

c# - .NET 管理层关系

转载 作者:太空狗 更新时间:2023-10-29 23:30:19 25 4
gpt4 key购买 nike

我实际上是在重建我的项目的默认架构。在这篇文章中,我希望你不仅能帮助我,还能思考、讲述和改进所呈现的方法。这可能是非常有用的挑战。这个默认架构可以与所有人自由共享。所以这里是描述:基本上 MVC 是我们的观点。我们遵循OOP 和分层编程概念。我们还将使用 SQL ServerEF DB First。所以这是我到目前为止所做的:我在我的解决方案中创建了 4 层:

  1. 领域:只是领域类
  2. DAL:负责访问数据,包含 UOW 和存储库以及数据访问相关的验证。
  3. BL:业务逻辑的唯一负责人,DAL 的唯一老板。
  4. UI:哪个不是那么重要! (甚至它可能是一个控制台应用程序!)

我已经使用 getAllgetById 等通用函数以及 crud 函数实现了 BL。这些函数将调用 DAL 通用函数,后者也已准备就绪。现在一个重要的问题是:将 DAL funcs 实现为 GENERIC 是否正确?请考虑这种情况:

在 UI 中,我们将模型发布到操作中,在操作中我们调用 BL Func (BL.insert(model))。 BL.Insert 函数会调用类似DAL.Add(model) 的函数(注意 BL 将调用 DAL 一次并告诉它它想要什么)。现在 DAL.Add 函数必须将 3 条记录插入到 3 个不同的表中(模型从 UI 层传递)。我认为这不能通过 DAL GENERIC 函数来实现。那么在注意关注点分离的情况下实现层和关系的正确和标准方法是什么?

在我的行动中我会:

[HttpPost]
public ActionResult Insert()
{
Bl.EntityBase.Article.Insert(new Article());
return RedirectToAction("Index");
}

在 BL 中我会:

public void Insert(T obj)
{
Da.Repository<T>().Insert(obj);
}

在我的 DAL 中我有:

public virtual void Insert(T entity)
{
DbEntityEntry dbEntityEntry = Db.Entry(entity);
if (dbEntityEntry.State != EntityState.Detached)
{
dbEntityEntry.State = EntityState.Added;
}
else
{
Set.Add(entity);
}
}

最佳答案

如果您通过 BL 传递给 DAL 的模型是一个 View 模型,那么逻辑将在您的 DAL 中,否则您不应传递将对 3 个不同表执行 3 次插入的模型。

关于c# - .NET 管理层关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31646525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com