gpt4 book ai didi

c# - 我的表示层应该在 NHibernate 中创建一个 session 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:29 25 4
gpt4 key购买 nike

我正在学习 NHibernate 并创建了一些单元测试,并且进展顺利。我的主应用只有两层:

  1. 演示文稿(WPF 应用程序)
  2. 域(具有业务逻辑和数据访问权限)

当然还有我的单元测试项目(测试)。

我的单元测试在 [TestFixtureSetup] 期间调用我的 SessionManager 类来构建一个 SessionFactory。然后每个 [Test] 获得一个 Session 来执行数据访问单元测试。我想知道我应该如何在我的 WPF 项目中执行此操作。

我已经创建了一个简单的对话框来查看我是否可以将我的 WPF 应用程序连接到我的数据库。在我的表示层中引用 NHibernate 感觉不对,我的感觉对吗?如果是这样,当用户在我的表单上单击 Add 以存储某些内容时,我应该如何获得一个 session 来存储对象?这是我的一些代码:

public class SessionManager
{
private ISessionFactory _sessionFactory;

public SessionManager()
{
_sessionFactory = GetSessionFactory();
}

public ISession GetSession()
{
return _sessionFactory.OpenSession();
}

private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
}

在我的测试项目中我有这样的东西:

    [TestFixtureSetUp]
public void TestFixtureSetup()
{
log4net.Config.XmlConfigurator.Configure();
DatabaseFixtureSetUp();
_sessionManager = new SessionManager();
}

[SetUp]
public void Setup()
{
DatabaseSetUp();

_session = _sessionManager.GetSession();
}

我不确定如何构建表示层代码来存储对象。我的表格上有这个:

    private void btnAddBroker_Click(object sender, RoutedEventArgs e)
{
var broker = new Broker
{
Name = txtBrokerName.Text,
IsActive = (bool)chkIsActive.IsChecked,
IsDefault = (bool)chkIsDefault.IsChecked
};

// save the broker object to the database
// is it ok to have NHibernate code here? feels wrong

}

你会怎么做?

最佳答案

虽然我不是 WPF 应用程序方面的专家,来自 Web 开发,但我会说是的,让表示层生成 session 确实感觉不对。

我的建议是创建一个负责创建 NHibernate session 的工厂类(我看到您使用 SessionManager 所做的)。然后,您的业务层可以调用工厂类来获取 NHibernate Session,然后在您的业务层中使用它来处理需要完成的任何请求。

然后您甚至可以使用和 Dependency Injection 注入(inject)该工厂类和业务层, 如果你坚持 IOC principles .

我相信你已经知道了,但我还是要提一下:无论您决定如何拆分,目标是将用户界面操作代码保留在一层,将业务代码保留在另一层,这样如果您需要将此应用程序移植到 Web 应用程序,则业务层可以重新-使用,只需要开发表示层。

看到您已经在进行单元测试,首先编写单元测试会自然而然地考虑以可单元测试的方式拆分类的职责,这是一件非常好的事情。我相信你走在正确的道路上。

关于c# - 我的表示层应该在 NHibernate 中创建一个 session 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8899770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com