为什么要写这节文章呢?
 
首先主动看我这系列文章和参加活动课程的同学, 肯定是积极好学的. 所以很大概率是学过设计模式和DDD理论的. 很大概率不是走一点都不懂设计模式和DDD理论这个极端, 而是走了过度使用设计模式和DDD理论,钻了牛角尖这个极端,这个现象有个科学名词叫做“原教旨主义”
 
因为我会在后面团队做项目的章节里面讲到DDD理论. 所以我在这节就不过多赘述了. 就以设计模式为例吧.
 
  1. 设计模式起于1995年的《Design Patterns: Elements of Reusable Object-Oriented Software》一书, 1995年, 年代好久远啊, 23年来各种技术工具发展, 这本书提出的23种设计模式的实现已经跟不上时代的脚本了. 我是2006年看这本书的, 那时候看得真是糊里糊涂啊.
  2. 直到后来遇到这本书<.NET与设计模式> 才开始能够理解设计模式, 因为这本书根据C#的特性(特别是反射), 合并23种设计模式的部分, 甚至做出了创新. 也就是说, 这本书能根据工具和技术的发展去完善设计模式理论的实现, 当然, 具体细节肯定是和上面1995年GOF的那本有不少差别.
  3. 看完<.NET与设计模式>这本书又过了一年, 我接触到Martin Flower的<测试驱动开发>那本书, 并开始使用TDD. 因为TDD需要使用Mock, 所以就需要使用interface和ioc, 这时候就不得不同时也不知不觉就用上了设计模式了.
  4. 又过了3年, 2010年, 我开始应用BDD, BDD比TDD多了很多优点, 其中一个就是测试代码更加结构化了, 于是用设计模式更自然了.
  5. 我在2011年的时候回顾了以上两本设计模式的书籍, 发现除了singleton模式的实现之外所有设计模式实现都变了. 详情可以看这篇文章<朝花夕拾 - 应用了6年久经实际项目考验未变的代码 - singleton模式>
  6. 现在是2018年了, 又十几年过去了, C#也到了8.0了, 这么多年来C#多了十分多的特性, 自然设计模式的实现细节是不一样的, 设计模式的种类更加不可能还是1995年的那23种了.
 
技术和工具不断的升级会简化和合并理论细节,从而更新了理论实施细节。所以我们不要钻牛角尖。
DDD也一样,ABP虽然不是严格的DDD实现,但是我们应该是去适应ABP,而不是去适应DDD. 就像我们应该去根据C#语言去实现设计模式, 而不是去根据GOF 1995年的书籍去实现设计模式 

如何用ABP框架快速完成项目(9) - 用ABP一个人快速完成项目(5) - 不要执着于设计模式和DDD理论,避免原教旨主义的更多相关文章

  1. ABP框架系列之七:(About-关于ABP)

    Considerations Source codes Contributors Contact ASP.NET Boilerplate is designed to help us to devel ...

  2. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录

    昨天发表了<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>后,大家十分热情,几个小时内就收到了不少问题,包括: 对于ui自动化测试这方 ...

  3. 如何用ABP框架快速完成项目(5) - 用ABP一个人快速完成项目(1) - 使用代码生成器

    用ABP一个人快速完成项目有如下要点: 站在巨人的肩膀上 - 使用代码生成器 站在巨人的肩膀上 - 使用成熟控件框架, 一个框架不够就上两个, 两个不够就上三个 通过微服务模式而不是盖楼式来避免难度升 ...

  4. 使用代码生成工具快速开发ABP框架项目

    在一般系统开发中,我们一般要借助于高度定制化的代码生成工具,用于统一代码风,节省开发时间,提高开发效率.不同的项目,它的项目不同分层的基类定义不同,我们需要在框架基类的基础上扩展我们的业务类代码,尽量 ...

  5. 使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面

    世界上唯一不变的东西就是变化,我们通过总结变化的规律,以规律来应付变化,一切事情处理起来事半功倍.我们在开发后端服务代码,前端界面代码的时候,界面都是依照一定的规律进行变化的,我们通过抽取数据库信息, ...

  6. 广州.net俱乐部12月份ABP框架活动场地征集、志愿者征集、合作讲师\副讲师征集

    大家好,我在<被低估的.net(上) - 微软MonkeyFest 2018广州分享会活动回顾>一文中提到,我将在12月份搞一场ABP框架活动,现向大家征集活动场地.志愿者.合作讲师\副讲 ...

  7. [ABP]浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  8. 浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  9. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...

随机推荐

  1. Mybatis3.2不支持Ant通配符TypeAliasesPackage扫描的解决方案

    业务场景 业务场景:首先项目进行分布式拆分之后,按照模块再分为为api层和service层,web层. 其中订单业务的实体类放在com.muses.taoshop.item.entity,而用户相关的 ...

  2. numpy中的norm用法

    np.linalg.norm() computes the norm of a NumPy array according to an order, ord, which specifies the ...

  3. 免费开源的diff软件“meld”-替代beyond compare的神器

    命令行直接对比文件 meld dir1 dir2 & 1,安装 mld, 可以选择windows, linux, macos系统,都有提供安装. ubuntu 中安装: sudo apt-ge ...

  4. 【spring】task 任务调度(定时任务)

    1.定时任务的几种实现可以看这里:http://gong1208.iteye.com/blog/1773177 2.需要导入spring的jar包,可以参看之前的[spring]相关文章 3.这里使用 ...

  5. [EXP]Microsoft Windows 10 (Build 17134) - Local Privilege Escalation (UAC Bypass)

    #include "stdafx.h" #include <Windows.h> #include "resource.h" void DropRe ...

  6. 详解OJ(Online Judge)中PHP代码的提交方法及要点【举例:ZOJ 1001 (A + B Problem)】

    详解OJ(Online Judge)中PHP代码的提交方法及要点 Introduction of How to submit PHP code to Online Judge Systems  Int ...

  7. 项目ITP(一) 二维码

    前言 系列文章:[传送门] 上几周碌碌无为,不行啊不行啊.博客园,不知道你几时改版.老家了,我不会忘记你呢.呵呵,我也会在os,csdn更新的.每天一搏,不管有用没用. 正文 正文先有项目起步,项目中 ...

  8. arcgis 加载png图片实现图片跟随地图缩放 和图片的动态播放

    效果图: 主要原理: png加载到地图上是不可能的, 图像本身是没有地理信息的. 这里采用一种办法, 在地图上创建一个图形图层, 图形图层放一个矩形,给这个矩形用一个图片填充符号填充. 关键技术点: ...

  9. spring-boot(五) RabbitMQ详解 定时任务

    学习文章来自:springboot(八):RabbitMQ详解 springboot(九):定时任务 RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分 ...

  10. React hooks实践

    前言 最近要对旧的项目进行重构,统一使用全新的react技术栈.同时,我们也决定尝试使用React hooks来进行开发,但是,由于React hooks崇尚的是使用(也只能使用)function c ...