作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我实际上是在重建我的项目的默认架构。在这篇文章中,我希望你不仅能帮助我,还能思考、讲述和改进所呈现的方法。这可能是非常有用的挑战。这个默认架构可以与所有人自由共享。所以这里是描述:基本上 MVC 是我们的观点。我们遵循OOP 和分层编程概念。我们还将使用 SQL Server 和 EF DB First。所以这是我到目前为止所做的:我在我的解决方案中创建了 4 层:
我已经使用 getAll
和 getById
等通用函数以及 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/
我是一名优秀的程序员,十分优秀!