Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
POO和接口(在C#中)_C#_Oop_Interface_Dependency Injection - Fatal编程技术网

POO和接口(在C#中)

POO和接口(在C#中),c#,oop,interface,dependency-injection,C#,Oop,Interface,Dependency Injection,我需要了解接口: 我有这样的结构: Core (contain Interface) BLL (Contain object who implement interface DAL (Contain Data access) IHM (Call BLL object) 例如,我有一个Interface Core.i车辆,它描述了一种基本的车辆,如: Color Speed 还有一种方法: LoadVehicle(int id) //return a iVehicule with speed

我需要了解接口:

我有这样的结构:

Core (contain Interface)
BLL (Contain object who implement interface 
DAL (Contain Data access)
IHM (Call BLL object)
例如,我有一个Interface Core.i车辆,它描述了一种基本的车辆,如:

Color
Speed
还有一种方法:

LoadVehicle(int id) //return a iVehicule with speed and color
在我的BLL中,我有一个对象“BLL.Car”,它实现了“Core.IVehicle”。 因此,我将有一个LoadVehicle方法,并访问DalVehicle以获取基本信息

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

我错过了什么?我的DAL如何返回一个对象“BLL.Car”

但是DAL需要返回一个对象“BLL.Car”

这可能就是困惑所在

您的DAL不应返回
Car
的BLL版本,DAL应拥有自己的
Car
aka entity/DAO(数据访问对象)版本。BLL应该查询car“实体”的DAL(无论它是作为DTO还是
IVehicle
)返回的),并构建它自己的
car
aka域模型表示

所以总结一下,你应该有2个版本的
Car

实体/DAO(DAL)

域模型(BLL)

IHM(视图)


由于
i内核
位于核心DLL中,因此它可以在所有层之间共享,因此您无需担心循环引用,它为您提供了一致的返回类型。

poco。。简单的旧clr对象我认为你的意思是面向对象的OOP编程你的DAL应该返回BLL.Car实现是什么意思?你的意思是你的DAL应该返回一个包含所有数据的BLL对象;从数据库中填充的属性?阅读此问题,它可能有助于@FaddishWorm在意大利面向对象编程->POO Programmazione Orientata agli Oggetti。“我想在法国也有类似的情况,但实际上是吗?”史蒂文如果你想实现一个纯粹的分层架构,那么是的。像这样的库使这个平凡的任务变得非常简单。我理解Mark试图表达的观点(我以前读过那篇文章),但是,对我来说,保持您的域独立于UI&DAL仍然是一个很好的实践,因为,让我们面对现实,应用程序不断发展,无论您多么确信事情不会改变——没有人能够预测未来。因此,问题真的变成了,现在是否值得努力分离层,而不是以后必须重构?
public class Car : IVehicle
{
}
...
public class CarRepository
{
    ...
    public IVehicle LoadVehicle(int id)
    {
        var entity = // query DB for instance of DAL.Car
        return entity;
    }
}
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
        };
    }
}
public class Controller
{
    public void ViewCarDetails(int id)
    {
        var carService = new BLL.CarService();
        var car = carService.FindCarById(id);
        // populate UI with `car` properties
    }
}