【问题标题】: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/InventorySample47d779a 的示例中,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
      {
      
      }
      

      那么你只需要引用接口而不是对象本身。 另外,也许查找术语“组合根”。

      【讨论】:

        猜你喜欢
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        • 2018-08-19
        • 2019-02-04
        • 2014-11-10
        • 2021-04-23
        • 1970-01-01
        相关资源
        最近更新 更多