【问题标题】:Can’t find best way for apply best in code design techniques in software dev找不到在软件开发中应用最佳代码设计技术的最佳方法
【发布时间】:2018-07-03 07:34:16
【问题描述】:

[预]

我不得不说我是一个笨拙的新手,我试图将重要的谜题与 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,每个项目都会根据定义的数据上下文生成自己的数据库由英孚。是不是很冗长或者这是正确的方式?

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

  3. 我不明白设计数据类的最佳方法是什么?它们应该只是 POCO 还是我可以将它们设计为具有私有 var 和公共属性的漂亮类?这里有哪些最佳实践?

  4. 另外我不明白在此基础上使用 MVVM 模式的最佳实践是什么,在这种情况下使用 MVVM 是否适用?

  5. 我应该将我的测试保存在 MyApp.PackType1.DataModel.Tests 等单独的项目中,还是将它们保存在同一个项目中? 此致, 马克斯!

附言

为不明确的定义和问题道歉,英语不是我的母语。

【问题讨论】:

  • 一些文本格式怎么样。
  • "我怕我又做错了";不要害怕错误,为他们计划。寻找容易删除错误的编码模式和习惯。

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


【解决方案1】:

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

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

  2. 读取点 #1

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

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

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

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

问候

【讨论】:

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

    那篇 CodeProject 文章会派上用场的。

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 2022-11-17
      相关资源
      最近更新 更多