我正在C#中使用VS2010创建一个控制台应用程序。它基于包含三层的三层体系结构。
为了消除PMS.DAL和PMS.BL之间的循环依赖,我添加了一个额外的层PMS.Service。
IVehicle。AddNewVehicle()类的Vehicle方法,实现IVehicleAddNewVehicle(IVehicle obj)中调用VehicleDao的BL方法。所有的工作都很好,但在编译时说要在PMS.UI中添加对PMS.UI的引用。
PMS.UI没有实现PMS.Service的任何接口,而是调用实现IVehicle的PMS.BL车辆类的AddNewVehicle()方法。
只有在创建PMS.Service类的Vehicle实例以实现PMS.Service中的IVehicle的情况下,才有必要添加对PMS.Service的引用。
请帮助我,我是新使用的接口在c#.
谢谢你们的回答,但我还是很困惑。我将在这里展示我的代码,我将所有四个层添加为不同的c++类库(不同层)。
1)PMS.UI(Added reference of PMS.BL)
Program.cs
using System;
using PMS.BL;
namespace PMS.APP
{
class Program
{
static void Main()
{
var vBo = new VehicleBo();//Compiler Says Add reference of PMS.Service here.Why is it necessary to add Reference of it??
vbo.VehicleNumber = "BA1PA 1212";
vbo.VehicleType = "Bike";
vbo.SaveNewVehicle();
}
}
}
2)PMS.BL(Added reference of PMS.DAL and PMS.Service)
VehicleBO.cs
using PMS.DAL;
using PMS.Service;
namespace PMS.BL
{
public class VehicleBo : IVehicle
{
public string VehicleNumber { get; set; }
public string VehicleType { get; set; }
public void SaveNewVehicle()
{
var vDao = new VehicleDao();
vDao.SaveNewVehicle(this);
}
}
}
3)PMS.DAL(Added reference of PMS.Service)
using PMS.Service;
namespace PMS.DAL
{
public class VehicleDao
{
public void SaveNewVehicle(IVehicle obj)
{
//code to insert in database
}
}
}
4)PMS.Service
IVehicle.cs
namespace PMS.Service
{
public interface IVehicle
{
string VehicleNumber { get; set; }
string VehicleType { get; set; }
void SaveNewVehicle();
}
}发布于 2013-11-24 10:02:44
具有给定的详细信息(没有代码)。这就是我所理解的。
PMS.Service (IVehicle.cs)
PMS.BL (Vehicle : IVehicle)在这个场景中,如果您正在公开车辆,则还必须添加对PMS.Service的引用。在任何情况下,在服务实现中具有模型接口/联系人看起来都不正确。我更愿意考虑创建PMS.Contracts,并将我的模型/服务合同放在那里。
希望这能有所帮助。
发布于 2013-11-24 10:04:42
我觉得你在建筑上有问题。基本上,如果您在三层,这是一个好方法:
IHM => BLL => DAL
Core核心是一个包含工具功能的项目(格式、日期、编号等)。还有你的界面。
依赖项: IHM引用BLL / BLL引用DAL。所有这些参考核心。核心没有依赖。
我和你一样是界面初学者。在这里,如果我必须这样做,我会选择这样做:
4个项目:
In Core :两样东西:一个接口IVehicle和一个实现该类调用工具的类
因为我们需要使用DAL,所以我不知道如何不使用Core.Vehicle。抽象类不是很好,因为如果DAL需要返回"IVehicule“对象,我们需要实现一个对象,而不能实现抽象或接口。
在BLL中:两个对象:实现Core.Vehicule的汽车和卡车
在DAL中:一个对象:带有返回Core.Vehicule的方法的车辆
在IHM中: BLL.Car的调用
它在做这件事..。
编辑:我发布了一个类似于你的问题:POO and Interface (in C#)
希望它能帮到你。
https://stackoverflow.com/questions/20173042
复制相似问题