abp模块化开发之通用树2:设计思路及源码解析 (2)

它的主要职责总体设计也说了一嘴,完成crud和move移动操作,难点是处理code的自动生成,尤其是移动节点时,节点原来位置之后的其它节点及其后代节点、目标节点之后的其它节点及其后代节点的code的生成
内部对数据的操作直接注入IRepository<TEntity, long>,因此按abp的套路,默认情况下使用EF时,调用方只需要在他的DBContext中顶一个DBSet就可以了

public class GeneralTreeManager : GeneralTreeManager<GeneralTreeEntity>

实现“通用数据字典”的默认领域服类,因为核心功能父类基本都完成了。所以几乎没代码

七、应用服务

按套路一个抽象类,一个默认实现类,内部核心操作是上面提供的Manager来完成的,应用服务主要是出去权限和dto之间的转换

public  class GeneralTreeAppServiceBase< TEntity,  TDto, TEditDto> : ApplicationService,     IGeneralTreeAppServiceBase<TDto, TEditDto>
        where TEntity : GeneralTreeEntity<TEntity>
        where TDto : GeneralTreeGetTreeNodeBaseDto<TDto>, new()
        where TEditDto : GeneralTreeNodeEditBaseDto

另外它提供了一些通用方法,一个树形数据通常在3个地方呗使用,以产品分类为例,在产品分类的管理页面、在产品的搜索栏应该提供产品类别的选择、在产品编辑页面应该有个下拉框选择当前产品所属类别,其它树形数据都有类似的场景,因此抽象的应用服务处理了这部分功能

public class GeneralTreeAppService : GeneralTreeAppServiceBase< GeneralTreeEntity, GeneralTreeDto, GeneralTreeEditDt, GeneralTreeManager>,IGeneralTreeAppService

按套路我们为“通用字典”提供了一个默认的实现类

 

应用服务中的DTO定义、应用服务接口我这里省略了,这是abp的常规套路,请看源码

八、abp相关套路:模块、本地化、权限、菜单

模块和本地化就不说了,abp的常规套路
由于我们提供了“通用字典”,默认情况下是可以直接用作你项目的,调用方完全可以按abp的套路在自己的模块中来配置权限和菜单,但是默认我们的模块也提供了,调用方完全可以在主机的PermissionProvicer和NavigationProvider的合适的位置配置权限和菜单。参考GeneralTreeModuleConfig源码

九、总结

abp本身提供了模块化方式,如果运用得当我们的系统可以由很多小模块组成,将来更容易维护、升级和复用
就好比我们目前提供的通用树,如果你使用的是abp,那么完全可以拿去就用,类似的“通用附件”模块,因为我们的多个系统或者同一个系统都可能会用到附件的功能,到处复制代码是下下策。

。。

 

 

 

 

 

 

 

Install-Package BXJG.GeneralTree -Version 1.0.2

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxsxw.html