No p poo:POO和接口(在C#中)(ooppoo)

我需要了解接口:

我有这样的结构:

Core (contain Intece)
BLL (Contain object who implement intece 
DAL (Contain Data access)
IHM (Call BLL object)

例如,我有一个接口 Core.IVehicle 谁描述一个基本的车辆,如:

Color
Speed

和一个方法:

LoadVehicle(int id) //return a iVehicule with speed and color

在我的 BLL 中,我有一个实现“Core.IVehicle”的对象“BLL.Car”。所以,我将有一个 LoadVehicle 方法并访问 DALfor 获取基本信息

但 DAL 需要返回一个对象“BLL.Car”实现。但由于循环依赖关系,我无法对 BLL 进行引用。

我的 DAL 如何返回一个对象“BLL.Car”实现?

2

但 DAL 需要返回一个对象“BLL.Car”实现。

这可能就是混乱所在。

您的 DAL不应该返回Car的 BLL 版本,DAL 应该有它自己的Car版本,也就是实体/DAO(数据访问对象)。BLL Domain 应该查询汽车“实体”的 DAL /(它是作为 DTO 还是模型的表示

所以总结一下,你应该有 2(或 3,如果你想要一个视图模型)版本的Car

实体 / DAO (DAL)

public class Car : IVehicle
{
}
...
public class CarRepository
{
    ...
    public IVehicle LoadVehicle(int id)
    {
        var entity = // query DB for instance of DAL.Car
        return entity;
    }
}

域模型 (BLL)

public class Car : IVehicle
{
}
...
public class CarService
{
    public IVehicle FindCarById(int id)
    {
        var repo = new DAL.CarRepository(...);
        var carEntity = repo.LoadVehicle(id); // returns DAL.Car instance 
        return new BLL.Car // we turn DAL.Car into our DLL.Car
        {
            Color = carEntity.Color,
            Speed = carEntity.Speed
        };
    }
}
IHM (View)
public class Controller
{
    public void ViewCarDetails(int id)
    {
        var carService = new BLL.CarService();
        var car = carService.FindCarById(id);
        // populate UI with `car` properties
    }
}

因为IVehicle在 Core DLL 中,它可以在所有层之间共享,所以你不需要担心循环引用,它给你一个一致的返回类型。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(816)
低代码发展前景:Greasemonkey提示前景
上一篇
Hdtune5.0:Npgsql与.NET5.0
下一篇

相关推荐

  • Demur rage:C#-VisualStudio和 Rage

    关于Demur rage的问题,在rage studio中经常遇到,你好,我有一个标注的一些问题,使我不知道是否有人在这里可以帮助我,但我会尽量问反正。…

    2024-02-12 15:25:54
    0 22 83
  • C++学习书籍:学习 C# 的书籍(best book to learn c#)

    关于C++学习书籍的问题,在best book to learn c#中经常遇到,我想学习 C # 和.NET 框架以及。…

    2024-01-11 14:30:09
    0 47 27
  • C#try:在 C++中使用try/catch块

    关于C#try的问题,在try catch c+中经常遇到,一般来说,我倾向于使用 try / catch 的代码有多个故障点的故障有一个共同的处理程序。…

    2024-02-05 14:28:49
    0 94 80
  • 凹凸世界c:你好 世界!——C#(c# code hello world)

    关于凹凸世界c的问题,在c# code hello world中经常遇到,我不确定我在这里做错了什么。我试过Console.Read();,Console.ReadLine();,也没有。我也试过Ctrl F5。我在搜索时没有发现其他建议。如果相关,我正在使用 Visual Studio Express。显然,我试图让程序说“Hello world!”这是我的代码:…

    2023-10-24 10:49:08
    0 24 32
  • 概率论中c几几的公式:用 C# 实现偏正态分布的概率密度公式

    关于概率论中c几几的公式的问题,在gaussian pdf formula中经常遇到,我问这个question前一段时间在 math.stackexchange。…

    2023-12-23 00:37:26
    0 10 50
  • C#pdf:在 C#中预览PDF(pdf previewer)

    关于C#pdf的问题,在pdf previewer中经常遇到,我正在寻找.NET GUI 组件(不同于PDFsharp)允许预览 PDF 1 页文档。基本上我需要类似于 PictureBox 的东西,我可以加载位图并显示它。…

    2023-11-21 05:41:15
    0 77 92
  • C罗号码:c# alpha电话号码翻译

    关于C罗号码的问题,在number translator中经常遇到,我有一个家庭作业,其中程序将接受类似于 555-GET-FOOD 格式的任何电话号码。任务是将字母映射到数字,并将数字转换为其等效数字。例如:A,B,C = 2;D,E,F = 3;等...…

    2024-01-06 14:49:00
    0 84 72
  • C#截屏:如何采取截图每隔几秒钟 C# 控制台

    关于C#截屏的问题,在random screenshot中经常遇到,我正在做一个 C # 控制台应用程序,每 20-40 秒截图。…

    2024-02-14 12:10:52
    0 82 30

发表评论

登录 后才能评论

评论列表(10条)