【问题标题】:Circular dependency between MODEL and DALMODEL和DAL之间的循环依赖
【发布时间】:2020-12-20 06:14:58
【问题描述】:
我有一个包含所有数据库操作逻辑的类库。我的 ProjectSolution 中的另一个项目是我的 WPF Core 应用程序。我在那里创建了我的学生模型。
在我的 Mainwindow.xaml.cs 中,我实例化了我的 DataAccess 类。在这里,我依赖于包含此数据访问类的类库。现在我想在我的数据库中插入一些虚拟数据。 (我使用 Dapper Micro ORM)我的想法不是对 sqlStatement 进行硬编码或使用存储过程,而是运行一个学生列表并将它们插入我的表中。但为此,我需要在我的数据访问类库中对学生的依赖。还有问题。我希望我的数据访问与我的 Wpf Core 应用程序分离。任何人的想法?顺便说一句,我是编程新手。
【问题讨论】:
标签:
c#
sql
wpf
model
data-access-layer
【解决方案1】:
拥有一个带有实体和业务逻辑的 Core 项目是很常见的。
您的 WPF 项目(即表示层)以及包括 DAL 在内的所有其他项目都将引用此核心应用程序。
--------
| Core | <- DAL
-------- <- WPF App
更传统的做法是:
DAL <- Core (Business Logic) <- App
Microsoft 维护了一些示例项目,其中包含您可以参考的真实示例。这是一个采用传统路线的 UWP 示例:https://github.com/microsoft/InventorySample
在 47d779a 的示例中,Inventory.Data 项目是您的 DAL,Inventory.ViewModels 是“核心”项目。
【解决方案2】:
您应该查找工作单元模式,存储库模式。
那么你可能想查找 SOLID -> 5 个原则合一。
结合所有的原则和模式,应该给出一些非常扎实的东西。
如果您正在寻找更具体的东西:
public interface ICreateStudent
void CreateStudent(IStudent student){
...create DAL-student from interface, store created obj.
}
//Generate this a partial class for implementing the IStudent interface, if your code is being
//autogenerated by dapper.
public partial class WPFStudent : IStudent
{
}
那么你只需要引用接口而不是对象本身。
另外,也许查找术语“组合根”。