我已经用C#创建了一个win form解决方案。该解决方案有三个项目:前端层(FL)、业务层(BL)和数据层(DL)。
前层有所有的形式。所有表单都实现了IForms接口业务层具有所有的业务逻辑。所有的业务逻辑类都实现了IController接口,数据层包含了与sql数据库通信的所有数据逻辑。所有数据逻辑类都继承了IModel接口
我正在尝试使用MVC设计模式,但我遇到了一些困难。
目标:当我按下表单中的按钮时,调用BL类中的方法。
如果我把BL dll加到FL上,那么我就可以调用BL的方法了。
BL.Class classObject = new BL.Class(this);
classObject.CallMethod();在BL中,我想拥有调用该方法的对象的引用,所以我试图添加FL dll的引用,但它显示为循环dll引用。
我想在BL类中有一个构造函数:
公共视图(IView BL.Class){ MessageBox(view.Name);}
我如何构建我的解决方案来实现这一点?请注意,解决方案很大,所以我不能将所有类合并到一个dll中。
多保重,FM
发布于 2010-11-26 06:39:20
您可以在BL中定义事件,以便FL注册。每当模型发生变化时,BL都应该触发一个事件。这是由视图处理的。
您的BL创建了一个消息框。如果您的视图是WebForm,该怎么办?BL不应该知道视图的细节。
另外,你的BL项目不应该有一个对FL的dll引用。你需要在BL中声明IView,而不是FL。
编辑:这是我之前使用的结构。你的BL定义了接口。如果你的视图想要使用BL,它必须实现这个接口。BL使用接口与视图进行交互。这样,您就可以构建使用相同BL的不同视图。
BL.dll
public interface IView
{
/// <summary>Update the view</summary>
void UpdateView(object myBusinessObject);
/// <summary>Display message</summary>
void ShowMessage(string msg);
}
public class BL
{
// Model and View
private IView _view;
/// <summary>Constructor</summary>
public BL (IView view)
{
_view = view;
}
public void foo()
{
// Do something
// Show message
_view.ShowMessage("Hello World");
}
}FL.dll
public class FL
{
private BL _myBL;
/// <summary>Constructor</summary>
public FL ()
{
_myBL = new BL(this);
}
/// <summary>Handles user event</summary>
public void handleEvent()
{
// Call BL to do something
_myBL.foo();
}
public void UpdateView(object myBusinessObject)
{
// Update your view
}
public void ShowMessage(string msg)
{
// Display message to user
}
}发布于 2010-11-26 06:30:57
您正在尝试将表示逻辑注入您的业务层。您的BL不应该创建消息框--这是表示层的责任。
发布于 2010-11-26 06:37:10
我知道你的winforms编程,但你可能想看看WebFormsMVP或MVVM模式,以获得一些想法。
在BL中,我希望拥有调用该方法的对象的引用,因此我尝试添加FL dll的引用,但它显示为循环dll引用。
具体地说,在WebFormsMVP项目中,参数根据它们在.Net框架中的方式在层之间传递,例如(对象发送器,mySpecialEventArgs e) -参数"mySpecialEventArgs“中的第二个参数具有来回传递的所有信息。
https://stackoverflow.com/questions/4281258
复制相似问题