我需要了解接口:
我有这样的结构:
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”实现?
但 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 中,它可以在所有层之间共享,所以你不需要担心循环引用,它给你一个一致的返回类型。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(10条)