我需要理解界面:
我有这样的结构:
Core (contain Interface)
BLL (Contain object who implement interface
DAL (Contain Data access)
IHM (Call BLL object)例如,我有一个接口Core.IVehicle,它描述了一个基本的工具,如:
Color
Speed还有一种方法:
LoadVehicle(int id) //return a iVehicule with speed and color在我的BLL中,我有一个实现"BLL.Car“的对象"Core.IVehicle”。因此,我将有一个LoadVehicle方法,并访问DALfor获取基本信息。
但是DAL需要返回一个实现的对象"BLL.Car“。但是我不能引用BLL,因为它是循环依赖的。
我错过了什么?我的DAL如何返回实现的对象"BLL.Car“?
发布于 2013-11-24 13:10:46
但是DAL需要返回一个实现的对象"BLL.Car“。
这可能就是混乱的所在。
DAL 不应该返回BLL版本的Car,DAL应该有它自己的Car版本,即实体/ DAO (数据访问对象)。BLL应该查询DAL中的car“实体”(它是以DTO还是IVehicle的形式返回),并构造它自己的Car aka域模型表示。
因此,概括地说,您应该有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在核心DLL中,所以它可以在所有层之间共享,所以您不需要担心循环引用,并且它提供了一致的返回类型。
https://stackoverflow.com/questions/20174593
复制相似问题