架构设计分享之权限系统(看图说话)

前面一篇文章《最近架构随想》,我提到架构设计的一些构想,其实也是对之前项目经验的一些归纳及总结。今天我们就以权限系统作为切入点,谈一谈怎么设计权限系统以及怎么做到系统具有以下特性:

  1. Organized:如果系统组织比较好,可以起到事半功倍的效果。
  2. Encapsulated:对功能,结构,数据进行有效的封装,会使系统维护变得更加容易。
  3. Reusable:对常用功能以及组件进行有效的封装,可以使系统变得结构清晰且方便维护。
  4. Extensible:在设计系统的时候,如果很好的遵守OO的设计理念(OO的五大原则SOLID),即使系统做得很大,也会像火箭一样直冲云霄!
  5. Replaceable:在很多时候我们需要考虑到系统,组件或者功能的可替换性,因为需求是会变的。
  6. Testable:做到系统的可测性,会大大帮助开发以及维护,对团队开发以及分工协作起着非常重要的作用。
  7. Loose Coupling:隔离耦合是架构设计必须要考虑的一个因素,如果系统不能做到高内聚、低耦合,那么在维护,升级,新功能开发方面就会是一场噩梦!
  8. High Performance:高性能是系统设计必须重视的要点,用户不可能忍受简单页面加载超过十秒,也不可能接受页面操作频繁卡死的情形,所以在架构设计的时候必须从数据库,逻辑,服务以及UI进行合理的规划。
  9. Scalability:如果能做到前面的几点,那么我有理由相信你的系统一定具备Scalability。
  10. Enjoy Your Life:最后一点也是最重要的一点,不要忙碌于重复的码农工作,喝杯咖啡,享受代码,早点回家,陪老婆、陪小孩,环球旅游,享受生活!

废话半天,下面就开始看图说话环节:

架构设计图:

部署及组件图:

详细解决方案:

01_Client:存放UI相关的项目,比如Winform, WPF,ASP.NET, Silverlight,ASP.NET MVC或者相关的Web Model及View Model项目。

02_Hosting:存放与Service相关的项目,可以是Direct Service,Remoting Service,Web Service,WCF Service或者Web API Service 。

03_Domain:业务逻辑相关的所有实体以及操作(根据OO的思想设计类以及类之间的关系)。

04_Infrastructure:非业务方面的功能框架 (Data,Common,DataContract,AOP, IOC,Logging,Encryption,Email)。

05_Database:数据库项目(包含所有数据库脚本,方便开发,部署以及维护)。

06_Tests:所有测试项目(数据访问测试,框架测试,业务逻辑测试,服务测试以及View Model测试)。

07_ReferenceLibs:项目相关的外部引用。

08_Tools:一些简单的工具,方便开发,测试以及部署。

各层执行序列 (调用Service之前需要调用Service Adapter,然后根据项目配置来决定调用WCF Service,Web API Service 还是直接DLL引用):

权限系统设计 (支持多系统,Module多层级,Group多层级,多用户来源,功能权限,数据权限等):

权限系统数据库关系图(三个中心点:Users, Roles, Paths):

权限系统所有表(包括主要表以及备份表,主要是针对中小型项目,如果大型项目则要采用分库,分表以及分区的策略):

数据库项目——脚本注意事项以及如何一键执行所有数据库脚本(方便管理数据库脚本并且对团队开发以及分工协作帮助很大):

代码生成器——T4完全生成数据库,业务实体,业务层,服务层以及UI代码 (之前也用Winform和WPF写过代码生成器,这是第一次使用T4生成整个项目,感觉非常好用,并且随时修改随时使用,而且还可以根据项目进行定制化)。

这篇文章主要是看图说话,所以如果你有什么反馈,心得或者建议,不妨留言,我会尽力在今天进行回复。

如果您认为这篇文章还不错或者有所收获,不妨点击一下右下角的(推荐)按钮,因为你的支持是我写作,继续分享的最大的动力!

时间: 2024-08-02 06:59:44

架构设计分享之权限系统(看图说话)的相关文章

基于torch学汪峰写歌词、聊天机器人、图像着色/生成、看图说话、生成字幕

手把手教你基于torch玩转 学汪峰写词.自动聊天机器人.图像着色.图像生成.看图说话.生成字幕 作者:骁哲.李伟.小蔡.July.说明:本教程出自七月在线开发/市场团队.及七月在线5月深度学习班学员之手,有何问题欢迎加Q群交流:472899334.时间:二零一六年十月十二日. 前言 我们教梵高作画的教程发布之后,国庆7天,上百位朋友一一陆续动手尝试,大有全民DL.全民实验之感.特别是来自DL班的小蔡同学,国庆7天连做10个开源实验,并把这10个实验的简易教程(含自动聊天机器人)发布在社区上:h

看图说话 从开发商的角度 闲聊神州房市走势与“鬼城”的产生

看图说话 从开发商的角度 闲聊神州房市走势与“鬼城”的产生

DL4NLP —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型

看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.应用场景:比如说用户在拍了一张照片后,利用Image Caption技术可以为其匹配合适的文字,方便以后检索或省去用户手动配字:此外它还可以帮助视觉障碍者去理解图像内容.类似的任务还有Video Caption,输入是一段视频,输出是对视频的描述. (一)任务描述 目前来说,Image Caption任务主要集中在英文上,数

一种Android客户端架构设计分享

转载请注明出处:http://blog.csdn.net/ahence/article/details/56678126 技术发展日新月异,业界各种Android客户端架构设计,五花八门,但我们不能简单地说哪种架构更好,因为脱离业务谈架构是没有任何意义的,适合业务的才是好架构.而架构也不是一成不变的,随着业务的发展,也许当初设计的架构已不足以支撑目前的业务,那么就需要改变之前的架构.接下来将分享下我们Android客户端的架构设计,在App的某个业务发展阶段或许有一些参考意义. 分层化与模块化

看图说话,P2P 分享率 90% 以上的 P2P-CDN 服务,来了!

事情是这样的:今年年初的时候,公司准备筹划一个直播项目,在原有的 APP 中嵌入直播模块,其中的一个问题就是直播加速服务的选取. 老板让我负责直播加速的产品选型,那天老板把我叫到办公室,语重心长地说:"小王啊,你是知道的,我们这个直播模块对 CDN 的唯一要求就是性价比要高,所以希望你能多花点心思找找合适的产品." "好的,老板."我心里默默想着,这次一定要让老板刮目相看. 首先我对接了业内数家云服务上整理了一份各家直播加速方案的报价表,老板看完后说:"小

企业管理系统前后端分离架构设计 系列一 权限模型篇

前段时间分别用vue和react写了两个后台管理系统的模板vue-quasar-admin和3YAdmin.两个项目中都实现了基于RBAC的权限控制.因为本职工作是后端开发,比较清楚权限控制一个管理系统应该必须具备的核心功能,而且是可以做到通用的.打算写写关于管理系统前后端分离方面的文章,也是做一个知识的总结,其中会涉及到vue,react,node,.net core等方面的知识. 术语描述 用户(Subject):发起操作的主体 对象(Object):指操作所针对的客体对象,比如文章或评论

Multimodal —— 看图说话(Image Caption)任务的论文笔记(三)引入视觉哨兵的自适应attention机制

在此前的两篇博客中所介绍的两个论文,分别介绍了encoder-decoder框架以及引入attention之后在Image Caption任务上的应用. 这篇博客所介绍的文章所考虑的是生成caption时的与视觉信息无关的词的问题,如"the"."of"这些词其实和图片内容是没什么关系的:而且,有些貌似需要视觉特征来生成的词,其实也可以直接通过语言模型来预测出来,例如"taking on a cell"后生成"phone".

看图说话之已有的代码文件夹加入到git仓库

最近几个同事的硬盘连续损坏,丢失了不少数据,想想自己硬盘上那么多代码如果突然哪一天找不到了,那岂不是哭了. 仅仅简单的备份引发了一系列的折腾,就想在自己家的nas上建一个git服务器,既可以备份又可以实现版本控制. 我使用的是Git for windows + TortoiseGit 首先,在要加入git仓库的代码根目录上点右键,创建本地git库(如果代码很多的话需要等待一段时间,git需要创建索引) 创建成功后会在我们的根目录下出现一个.git文件夹,如果以后想去掉git版本控制的话,直接删掉

跌跌撞撞,用MAVEN看图说话的编译了一个JAR出来

URL: http://www.yiibai.com/maven/create-a-java-project-with-maven.html mvn archetype:generate -DgroupId=com.yiibai -DartifactId=NumberGenerat or -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false mvn eclipse:eclipse mvn package