在软件开发人员中找不到最佳方法来最好地应用代码设计技术

时间:2018-07-03 07:34:16

标签: mvvm tdd domain-driven-design entity-framework-core

[上一页]

我不得不说,我是个虚拟的新手,他正在尝试将重要的难题与DDD,TDD,MVVM和EFCore等关键细节放在一起。我有大约10年以完全错误的方式进行Windows窗体开发的经验,加入Plurasight之后,我了解到我刚刚失去了过去的10年,这真是可悲:)。

[问题描述]

我有一个应用程序,希望通过使用过去6个月在Pluralsight上学到的最新技术来从头开始重写,但问题是这些新知识正在阻止我,因为我只是恐怕我会再次犯错……(我知道这很愚蠢,但这就是事实)。

因此,回到我的问题,我有一个很大的问题域,并且文档记录得很好,业务逻辑必须转交给代码。我知道我的出发点是设计数据层,出于这些目的,我想使用实体框架核心(我看到了朱莉·勒曼(Julie Lerman)的Pluralsight课程,我认为她很棒,并激发了我将EFCore用作我的应用程序的ORM)。但是与此同时,经验的流失比我在Pluralsight上学到的问题产生的问题更多,我将尝试全部写下(请不要太刻薄地评价我)

  1. 在解决方案中,我似乎需要2个或更多数据模型项目,这就是为什么我有多个文档集类型,每个类型都包含不止一本用于生成唯一文档的参考书的原因文件名和数据表。但是我觉得很奇怪,有3个数据模型项目,例如MyApp.PackType1.DataModel,MyApp.PackType2.DataModel,并且每个项目都预装了EFCore,并且每个项目都会根据定义的数据上下文生成自己的数据库由EF。是不是很多余,或者这是正确的方法?

  2. 我不知道如何将这些多个数据模型项目(包括共享内核)加入一个不错的模型中

  3. 我不知道设计数据类的最佳方法是什么?它们应该只是POCO,还是我可以将它们设计为具有私有变量和公共属性的漂亮类?这里的最佳做法是什么?

  4. 我也不了解在此之上使用MVVM模式的最佳实践是什么,在这种情况下使用MVVM是否完全适用?

  5. 我应该将测试保存在单独的项目中,例如MyApp.PackType1.DataModel.Tests,还是将它们保存在同一项目中? 最好的祝福, 马克!

P.S。

对定义和问题不清楚表示歉意,英语不是我的母语。

2 个答案:

答案 0 :(得分:0)

回答您的问题非常复杂,因为您已经询问了很多细节,但是我将提供一个简短的答案,希望对您有所帮助。

  1. 您只能为您的实体(DDD)建立一个模型,并在您的最终级项目(Web API或UI)中从该模型创建子模型

  2. 读取点#1

  3. 您必须创建一个代表数据库的实体层项目,然后才能为特定方案创建DTO。

  4. 从我的角度来看,请使用Angular,但您可以使用其他UI框架,例如React或VueJs,但我更喜欢使用Angular来构建UI界面并从客户端使用.NET Core Web API

  5. 为您的Web API项目创建单元测试和集成测试,作为附加功能,您可以在内存提供程序中使用Db进行测试

该指南可能有用:https://www.codeproject.com/Articles/1160586/Entity-Framework-Core-for-Enterprise

致谢

答案 1 :(得分:0)

  1. 嗯,当您使用不同的数据库时,通常会出现多个DbContext(模型)。一般规则是一个上下文=一个数据库。当有很多表可以按功能分组时,可能会发生异常,但是这种方法有缺点。
  2. DbContext是一个存储库模式,但用于单个表。使用工作单元模式并与自定义存储库提供程序分层,可以使它作为单个数据库“出现”,从而从前端隐藏了复杂性。
  3. 您的实体描述通常创建为纯POCO。您可以使用不同的DTO获得创意
  4. 简而言之,MVVM模式如下所示:
    • 从用户界面到控制器的请求
    • 控制器可能会多次调用数据层以收集数据
    • 在单个ViewModel中组装数据(页面所需的一切)
    • 返回用户界面
    • 该方法的优点是到UI的单次往返(请求/响应)
    我认为
  5. 单独的项目。有一些使用EF欺骗数据库连接的技术,因此您不会使用“实时”数据。

该CodeProject文章会派上用场。