开始使用带有nHibernate的c#应用程序的asp.net webforms UI

时间:2011-01-25 08:03:53

标签: mvvm mvp webforms

您好
我一直在构建我的应用程序的后端(使用nHibernate进行数据访问) 到目前为止,我已经有一些简单的Web服务来操作我的数据,但现在我需要为我的应用程序开发一个Web UI(使用Web表单)。

我一直在寻找一些不同的Web框架(webformsMVPspring.net web),以及一些客户端JS框架(knockoutangular),我可以我真正决定什么对我最好,以及如何将它全部整合 我希望得到你们的一些见解。
我想我的一般工作流程是这样的:

  1. 创建了视图,调用其演示者。
  2. Presenter联系业务层以检索信息(后者又联系DAO等)
  3. Presenter返回视图显示的视图模型对象。
  4. 用户操纵数据(可能使用某些AJAX来检索更多所需信息)
  5. View将操纵数据的视图模型发送回演示者
  6. Presenter将视图模型转换为模型实体并将其发送到业务层

    现在这里是我觉得棘手的部分:
  7. :一种。如何在视图模型和模型实体之间进行映射
    我想我应该使用该权限的ID从DAO中检索未更改的实体(实际上将其存储在nHibernate的二级缓存中),并对其进行更改。
    (另一种选择是将我正在编辑的实体存储在用户的会话中。但我担心这种缓存会与nHibernate的缓存产生双重性。)

    B中。如何将视图模型上的更改转换为模型实体的更改
    我想在改变模型实体的属性时有一些逻辑 例如,为了将员工从一个部门转移到另一个部门,我不想允许这个 -

    department1.Employees.Remove(employee);
    department2.Employees.Add(employee);
    

    而是这个:

    employee.MoveToDepartment(department2);
    

    从视图模型转换为模型时,我担心这会变得复杂
    对上述两个问题以及任何客户端/服务器端框架的任何想法都会受到关注
    P.S。我的应用程序的一些快速背景:
    - Web应用程序的一个页面将公司的结构(部门,部门等)显示为树,并允许用户单击和编辑不同的节点,以及拖放节点以更改其位置。 />
    - 另一页显示当前库存状态(每个仓库 - 它有多少产品,当前在该仓库中有多少台机器等)

    - (更多页面基本上显示数据并允许编辑......)

    感谢
    的Jhonny

1 个答案:

答案 0 :(得分:0)

您可以查看Automapper您的实体映射。或者,您可以编写自己的实体映射器和实体更新器。然后,您可以在实体类中封装业务逻辑,例如Move To Department。

您的方法听起来不错,我可以推荐Webforms.MVP,因为这是一个很好的框架,用于编写可测试的WebForms应用程序,而无需滚动您自己的实现。