Nopcommerce架构浅谈之文件结构
应该是在两年前了,在拜读园子里大神的文章时偶然了解到有个叫NopCommerce的商城系统,苦于没有时间,各种耽误,其中研究过一段时间,也就是一个星期时间,后来又耽搁了,直到最近,随着项目进入间歇期,终于有时间好好的研究下nop的代码了,作为优秀的.net B2C商城系统,从系统的架构设计角度出发,具有很强的拓展性,结合DDD思想,我觉得可以对系统有更深入的了解。
今天我就简单的先将系统解决方案中的项目做拆解,并附上自己的理解。我这里使用的是3.7版本的源码,官方目前到3.8,整体应该差别不大,可以到官网查看http://www.nopcommerce.com
从四个文件夹说起:
一、Libraries
这里存放了大量的领域层服务、领域事件、基础设施等,可以说是整个系统的最核心,我的理解是即使没有展示层,这里的所有的功能也是完整的,换句话说,如果我将整个系统开发成API,这里地方不需要做额外的改动,只需要api程序调用这里的相关功能就可以实现,绝对的松耦合。
-
Nop.Core项目
文件没有显示齐全,但是可以大概看到,这个项目里存放了大量的通用支撑功能,用ddd的话讲应该就叫通用支撑子域,还包括了基础设施,领域类等。
-
Nop.Data项目
这个项目里是同数据库做交互操作的数据层,在ddd里属于基础设施一部分,也可以单独拎出来,以后换数据库也不是难事。
-
Nop.Service项目
领域服务,主要进行领域逻辑的实现。这个层的客户只有应用层,那么应用层在哪里?就在展示层中。其实这个里面并不包括web技术所特有的一些领域逻辑实现,就像我开始讲的,web的领域逻辑实现在展示层中的web框架项目中。
二、Plugins 插件机制是nop系统的一个很大的特色,不需要对系统做二次开发,可以灵活的开发出各种插件应用于系统。这个文件夹下面防止了大量的插件项目。
从名字就可以看出来了,有支付插件,有留言簿插件,有各种打折促销插件,这个以后再细说。
三、Presentation 展示层面,分为后台管理admin项目,前台web项目,web框架项目,他的绝妙之处在于将web框架从领域逻辑层剥离,就像刚才上面所讲的,可以将libraries里的服务单独拿出来用,没有任何的违和。
这里重点说下Framework,它是对Nop.Service的补充,重点在于对web程序的应用功能进行领域服务的深入。
四、Tests 大量的测试项目,这个在老外写的规范的项目里都是必须存在的,但是在国内,猿们为了更快的完成老板交代的任务,基本不会去做单元测试,唉。。。其实这个是绝对好,可以节省大量的时间。
后面我将逐个进行分析,对于nopcommerce,我的目标不是改装他,而是更多的学习先进的开发思维,一定要结合ddd思想。