基础框架组件
异常处理
统一的异常处理(应用层几乎不需要处理自己写异常处理代码)
Data Source is not exits:数据源不存在,因为这个问题很常见,比如在项目运行过程中,数据库断了,或者远程的服务无法访问,等等基本都属于这个问题的。所以这个异常肯定是要处理的。
Time out:超时。这个异常很常见,获取的数据过大,或者远程数据源连接超时,等,都可以引发一些问题。
如果数据源是其他服务接口提供数据,那么在数据获取时,可能要转换数据格式,如果格式出错,或者发送的数据不符合一些规则,这个异常一定要处理,因为这些数据可能涉及到安全的问题了:是数据真的不正确,还是被篡改了。日志跟踪
日志记录(自动记录程序异常),Log4Net,我们主要是使用log4net,将各个系统的日志,持久化记录到数据库或者文件中,以方便后续的系统异常监控和性能分析。如何集成log4net,这里不再说明。
日志记录的几个原则:
1.区分日志级别一定要区分清楚,哪些属于error,warning,info等
2.记录错误的位置,如果是分层系统,一定要在某个层统一处理,例如,我们的mvc架构,都是在各个action中catch异常,并处理,业务层和数据库层这些地方的异常,都是catch到异常后,往上一层抛。
3.日志信息清晰准确有意义,日志尽量详细点,以方便处理。应该记录相关系统,模块,时间,操作人,堆栈信息等。方便后续处理。缓存机制
那些数据要缓存,缓存在哪里,缓存数据时候要加密,缓存多长时间,如何刷新过期了的数据。事务机制
安全验证机制
依赖注入
Microsoft.Practices.Unity(依赖注入容器)多租户支持
多租户支持(每个租户的数据自动隔离,业务模块开发者不需要在保存和查询数据时写相应代码)
项目目录结构
- 01.Presentation
- 02.Application
- 03.Domain
|-- Entities
|-- Events
|-- Policies
|-- Repositories
|-- Services - 04.Infrastructure
Modules.Act LogicalDataModel
Act.Role
Role定义的最重要的一些属性包括:
Name:租户中角色的唯一名字。
DisplayName:角色中显示的名字。
IsDefault:表示该角色是否是默认赋给新用户的。
IsStatic:表示该角色是否是静态的(预生成的和不能删除的)。
角色是用来组合权限的。当一个用户有了一个角色之后,那Ta将会获得该角色的所有权限。一个用户可以有多个角色。用户的权限是该用户所拥有角色的所有权限的并集。
动态角色 vs 静态角色
角色可以是动态的或静态的:
静态角色 :静态角色有一个已知的名字(比如‘admin’),且以后不能改变这个名字(可以改变要显示的名字)。在系统启动的时候它已经存在了,并且不能删除。因此,我们可以基于一个静态的角色名写代码。
动态(非静态)角色:部署之后,我们可以创建动态的角色。然后我们可以为这个角色授予权限,我们也可以把该角色赋予其他用户,还可以删除它。在开发的时候,我们可以不知道动态角色的名字。
默认角色
可以设置一个或多个角色为默认角色。默认情况下,默认角色赋予新添加的或新注册的用户。这不是一个开发时属性,并且可以在发布后设置或者改变。使用IsDefault属性设置默认角色。
多租户
和用户管理相似,角色管理曾将也是在多租户应用中为单租户服务的。
Act.Function
- 1 新增
- 2 编辑
- 4 删除
- 8 查询
- 16 导出
- 32 打印
- 64 导入
ActionSum 15 :1 新增 2 编辑 4 删除 8 查询