首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#架构3层解决方案

C#架构3层解决方案
EN

Stack Overflow用户
提问于 2010-11-26 06:26:32
回答 7查看 1.8K关注 0票数 1

我已经用C#创建了一个win form解决方案。该解决方案有三个项目:前端层(FL)、业务层(BL)和数据层(DL)。

前层有所有的形式。所有表单都实现了IForms接口业务层具有所有的业务逻辑。所有的业务逻辑类都实现了IController接口,数据层包含了与sql数据库通信的所有数据逻辑。所有数据逻辑类都继承了IModel接口

我正在尝试使用MVC设计模式,但我遇到了一些困难。

目标:当我按下表单中的按钮时,调用BL类中的方法。

如果我把BL dll加到FL上,那么我就可以调用BL的方法了。

代码语言:javascript
复制
BL.Class classObject = new BL.Class(this);
classObject.CallMethod();

在BL中,我想拥有调用该方法的对象的引用,所以我试图添加FL dll的引用,但它显示为循环dll引用。

我想在BL类中有一个构造函数:

公共视图(IView BL.Class){ MessageBox(view.Name);}

我如何构建我的解决方案来实现这一点?请注意,解决方案很大,所以我不能将所有类合并到一个dll中。

多保重,FM

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-11-26 06:39:20

您可以在BL中定义事件,以便FL注册。每当模型发生变化时,BL都应该触发一个事件。这是由视图处理的。

您的BL创建了一个消息框。如果您的视图是WebForm,该怎么办?BL不应该知道视图的细节。

另外,你的BL项目不应该有一个对FL的dll引用。你需要在BL中声明IView,而不是FL。

编辑:这是我之前使用的结构。你的BL定义了接口。如果你的视图想要使用BL,它必须实现这个接口。BL使用接口与视图进行交互。这样,您就可以构建使用相同BL的不同视图。

BL.dll

代码语言:javascript
复制
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

代码语言:javascript
复制
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
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-11-26 06:30:57

您正在尝试将表示逻辑注入您的业务层。您的BL不应该创建消息框--这是表示层的责任。

票数 4
EN

Stack Overflow用户

发布于 2010-11-26 06:37:10

我知道你的winforms编程,但你可能想看看WebFormsMVP或MVVM模式,以获得一些想法。

在BL中,我希望拥有调用该方法的对象的引用,因此我尝试添加FL dll的引用,但它显示为循环dll引用。

具体地说,在WebFormsMVP项目中,参数根据它们在.Net框架中的方式在层之间传递,例如(对象发送器,mySpecialEventArgs e) -参数"mySpecialEventArgs“中的第二个参数具有来回传递的所有信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4281258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档