我正在使用VS2010在C#中创建一个控制台应用程序。它基于3层架构,包含三层
要删除PMS.DAL和PMS.BL之间的循环依赖,我添加了一个额外的PMS.Service层。
Vehicle
类,它实现了PMS.Service中的接口IVehicle
。AddNewVehicle()
Vehicle
BL类的IVehicle
方法
AddNewVehicle(IVehicle obj)
方法
醇>
所有工作正常但在构建时编译器说要在PMS.UI中添加PMS.Service的引用。
PMS.UI没有实现PMS.Service的任何接口,而是调用实现AddNewVehicle()
的PMS.BL的Vehicle类的IVehicle
方法。
是否有必要将PMS.Service的引用添加到PMS.UI,前提是它创建了Vehicle
PMS.BL类的实例,它实现了PMS.Service中存在的IVehicle
。
请帮助我我是新手在c#...
中使用Interface谢谢你们的答案,但我仍然感到困惑。我将在这里展示我的代码。我已经将所有四个图层添加为不同的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();
}
}
答案 0 :(得分:0)
使用给定的详细信息(并且没有代码)。这就是我的理解。
PMS.Service (IVehicle.cs)
PMS.BL (Vehicle : IVehicle)
在这种情况下,如果您要公开Vehicle,则还必须添加对PMS.Service的引用。在任何情况下,在服务实现中具有模型接口/联系人看起来都不正确。我宁愿考虑创建PMS.Contracts并在那里签订我的模型/服务合同。
希望有所帮助。
答案 1 :(得分:0)
我认为你有一个架构问题。基本上,如果你是三层,这是一个好方法:
IHM => BLL => DAL
Core
Core是一个包含工具功能(格式日期,编号等)和您的界面的项目。
依赖关系:IHM引用BLL / BLL引用DAL。所有这些参考核心。核心没有依赖性。
我是初学者,喜欢你的界面。在这里,我将选择是否必须这样做:
4个项目:
在Core中:两件事:一个接口IVehicle和一个实现这个类的类调用Vehicle
因为我们需要使用DAL,所以我不知道如何不使用Core.Vehicle。抽象类不好,因为如果DAL需要返回一个“IVehicule”对象,我们需要实现一个对象,我们不能实现一个抽象或接口。
在BLL中:两个对象:实现Core.Vehicule
的Car和Truck在DAL中:一个对象:带有返回Core.Vehicule的方法的Vehicule
在IHM中:BLL.Car的调用
它正在做的事情......
编辑: 我发布了一个类似你的问题:POO and Interface (in C#)
希望对你有所帮助。