Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为WinForms MVP应用程序实现业务对象_C#_Winforms_Mvp_Domain Object - Fatal编程技术网

C# 为WinForms MVP应用程序实现业务对象

C# 为WinForms MVP应用程序实现业务对象,c#,winforms,mvp,domain-object,C#,Winforms,Mvp,Domain Object,我正在从头开始构建一个新系统,并致力于应用程序的设计。我正在寻找可行的方法来建模我的领域对象 该项目的一些细节——这将是一个相当大的数据输入WinForms应用程序,集成到ESRI ArcMap(一个GIS应用程序)中。数据访问必须经过ArcMap自己的数据访问层-数据通过光标式访问进行检索和保存。这不是获取数据的问题,但据我所知,这排除了实体框架和NHibernate等ORM工具,因为我无法直接与数据库交互 WinForms应用程序将遵循MVP模式-视图将绑定到模型。演示者还将修改模型。因此,

我正在从头开始构建一个新系统,并致力于应用程序的设计。我正在寻找可行的方法来建模我的领域对象

该项目的一些细节——这将是一个相当大的数据输入WinForms应用程序,集成到ESRI ArcMap(一个GIS应用程序)中。数据访问必须经过ArcMap自己的数据访问层-数据通过光标式访问进行检索和保存。这不是获取数据的问题,但据我所知,这排除了实体框架和NHibernate等ORM工具,因为我无法直接与数据库交互

WinForms应用程序将遵循MVP模式-视图将绑定到模型。演示者还将修改模型。因此,域对象应支持以下内容:

  • 变更通知
  • 更改跟踪。至少我想知道我的型号是否改变了
我目前的选择:

  • 手工编写POCO+优点/缺点:
    • +应该是可行的
    • +能够适应业务逻辑
    • +装订的
    • -大量的体力劳动
      • -通过INotifyPropertyChange接口发出更改通知
      • -通过IsDirty属性进行更改跟踪,该属性必须手动维护
  • 由POCOs包装的ADO.NET数据集+优点/缺点:
    • +更改通知“免费”
    • +更改跟踪“免费”
    • +装订的
    • -感觉有点乱
  • 我已经排除的是:

    • 实体框架——我使用的是.NETFramework 3.5,因此不支持代码优先。据我所知,处理域逻辑非常混乱-事件处理程序
    还有其他好的选择吗?也许是代码生成(对工具有什么建议?),或者是一些框架?智慧的话语、建议?

    我的POCO只是“愚蠢”的数据传输对象,它们不包含任何业务逻辑。它们也不是我的模型,因为它们是另一组更接近我的UI的哑对象。我只是在我的数据访问层中向DTO注入大量数据,将它们传递到我的服务层以处理业务逻辑,但它们只传递到我的演示者/控制器,以便通过模型向我的UI注入足够的信息。对于您的场景,我认为这更符合逻辑,因为您必须通过ArcMap的数据访问层。您可以将数据保存在表示层中,并在其中进行更改跟踪。

    这比你想知道的还要多