首页   注册   登录

gsj987

V2EX 第 9429 号会员,加入于 2011-06-12 17:08:39 +08:00
gsj987 最近回复了
54 天前
回复了 justfortest 创建的主题 程序员 发现我不适合做程序员了
做每一件事情都有这个过程,抓耳挠腮百思不解,在多少个犹豫不决的苦恼和费力的通宵后,突然的就明白了。
我读书的时候搞编程是这样,创业以后学做项目管理是这样,后来学和客户打交道也是这样。

所以我现在和我的刚入行的同事说,学一个新技能不通几个宵(比喻)是不行的。
drf 需要显试配置的地方还是不少,CRUD 之外的操作,需要更多的带入到框架的逻辑内,业务复杂的时候反而显得麻烦。不过他帮我们把一些基础建设都做好了,在 Django 体系里暂时没有做的比他更好的。

不过主要 Django 本身的体系和结构也比较简单,而且是大包大揽的方式,所以 drf 的处理无可厚非。在一些更有分层和结构要求的框架和语言下,类似的框架会更有通用性,解决的问题更专一,当然使用起来也更复杂。

nodejs 里 nestjs 框架有一个 nestCRUD https://github.com/nestjsx/crud 我觉得是比较接近 drf 的,不过他是用了 nestjs 的分层架构,所以和 django 还是有很多不同。但是鉴于 django 和 drf 比他们成熟的多,而且他们俩本身是一揽子方案,没有外部依赖,所以一开始用 nestjs + nestCRUD 会不太适应。
@lihongjie0209 明白你的意思了。这个确实和 UoW 的概念没太大关系,UoW 主要作用就是事务。DDD 的设计战术之一就是一次操作只能修改一个 AR,所以需要 Domain Event 之类的东西来做关联,UoW 让各 AR 实现最终一致。

你这个例子中,确实没法在 Domain 或者 Application 层做相关的操作,因为对 Domain 他不关心持久化,对 Application 他只能看到 AR,不知道里面具体的实现。

这里你提问的半自动化 ORM,就是类似 Dapper 这样的吧?这些 micro-ORM 更多关注的是 M,而像 Hibernate 或者 EF 之类的更多的关注的是 O,也就是说前者还是一个面向数据库,效率高,透明轻快,而后者是面向对象,但是重量,不透明。在 DDD 中,领域对数据库无感知,甚至很多实践还强调聚合根里能用值对象就用值对象,所以无法在 Domain 中体现从对象关系变化映射到数据库变化的关联,这些都是由 Repository 完成的。

那么在如 EF 中,这种关联是自动实现的,因为他有 changetracker,另一方面,他还自己实现了 UoW。而 micro-ORM 没有这些,那就只能手动来做。具体的可以在 Repository 的实现中,对 AR 下的各 entity 的修改进行检查、保存。代价就是每一个特殊的检查都需要手动实现(或者如你的思路 2,自己实现一个 changetracker,如 Dapper.Contrib 就有类似的实现)。另外有些思路中,会拿 ORM 和 micro-ORM 混用,取两者的优点于一身 https://msdn.microsoft.com/zh-cn/magazine/mt703432.aspx
@lihongjie0209 这里篇文章讲了具体的实现 https://github.com/sheng-jie/UnitOfWork

因为 UoW 统一了持久化方法和事务,所以就可以用 AOP 的方式在框架层面对 UoW 进行隐式调用,如 ABP 的做法: http://www.cnblogs.com/1zhk/p/5309043.html

UoW 的作用是追踪 entity 在多个仓库间变化的依赖关系,自动帮你解决事务方法,让事务和持久化在多个聚合中保持统一,但是 IRepsoitory 的方法调用还是需要的。如果你的意思就 tracking changes 然后不调用 IRepository 更新的话,这个可能需要 orm 本身的支持。
@lihongjie0209 我指的是在 application 层对 repository 的显式调用,比如你说的 update。在实践中,repository 会用 IRepository 的形式作为基础设施服务,这样 application 就和具体的 orm 解除关联了。当然一般情况下,都会使用基础框架的 UoW 完成隐式更新。
一般使用 UnitOfWork 模式 来感知 Repository 的变化,或简单的把显式的操作放在 Application 层
2012-06-26 19:05:17 +08:00
回复了 Sean 创建的主题 分享发现 Jing.fm 交友
我也来放个码 http://jing.fm/?e1taURlCBgEI
2012-05-25 20:18:15 +08:00
回复了 Livid 创建的主题 Diablo III 和朋友在测试一款能够优化 D3 延迟的产品
2012-03-03 18:01:06 +08:00
回复了 lowrain 创建的主题 macOS 听说魔兽国服4.3支持mac了?
目前使用的就是Mac版。。
2012-01-31 10:19:12 +08:00
回复了 zicjin 创建的主题 .NET “Firefox开发团队全面转向Visual Studio 2010开发平台”
... 组团做成就
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4232 人在线   最高记录 5043   ·   Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 9ms · UTC 01:59 · PVG 09:59 · LAX 18:59 · JFK 21:59
♥ Do have faith in what you're doing.
沪ICP备16043287号-1