它的主要职责总体设计也说了一嘴,完成crud和move移动操作,难点是处理code的自动生成,尤其是移动节点时,节点原来位置之后的其它节点及其后代节点、目标节点之后的其它节点及其后代节点的code的生成
内部对数据的操作直接注入IRepository<TEntity, long>,因此按abp的套路,默认情况下使用EF时,调用方只需要在他的DBContext中顶一个DBSet就可以了
实现“通用数据字典”的默认领域服类,因为核心功能父类基本都完成了。所以几乎没代码
七、应用服务按套路一个抽象类,一个默认实现类,内部核心操作是上面提供的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