本发明涉及移动互联网系统构架设计技术,特别涉及一种多用户商城的系统构架设计。
背景技术:
在ef的默认配置中,业务模型和ef其它部分是在同一目录下。业务模型在项目中是无依赖且被其它几乎所有项目所引用(除core外),业务模型混杂在ef中将导致ef被其它层引用,即整个ef对其它可视,这种引用关系严重破坏了各相邻层之间单向依赖性,因此在himall中我们对ef的配置进行了改进,将ef的映射关系部分与模型代码部分分离到两个独立的项目之中,这样其它层就可以单独对模型进行引用,而不需要引用ef的其它部分。
技术实现要素:
对于大规模的web应用,从规模上通过area划分成小的单元,每个相当于独立的子系统,包含自己的models、views和controller在内的目录结构和配置文件。本框架设计的ui层组织结构也是按此规则,建立了admin、selleradmin以及web三个区域并分别配置路由信息。
本框架设计中使用autofac来实现ioc模式,所有服务层代码分成两个部分,一部分是接口,另一部分为实例,通常情况下,autofac需要通过配置文件指明实现类与接口之间的关系,而himall中采用了默认配置的方式简化此操作,即按一定的规则编写接口和实现类就可以自动建立对应关系;
ioc模式是目前常用的解耦方法之一,它能降低不同层级之间的的耦合度,使以前直接的实例之间的调用变更为对接口的调用,即上层不再依赖于具体实例而依赖于下层所提供的接口,此方式也属于面向接口编程,面向接口而非面向实例可以使程序更加稳定,不会因为实例中的方法修改导致上层代码的级联修改,只要接口不发生变化,则上层代码无需改变。
数据层主要采用微软的entityframework(以下简称ef)做为orm框架,不再有直接的sql语句编写,使用分部类建立了与ef自建模型相对应模型文件。
作为系统的最底层的核心层,不依赖于任何项目,与具体业务无关接口与方法的集合,定义和实现了相关机制,如异常处理、日志处理、定时任务、权限:
1.定时任务机制:定时任务采用开源组件quartz.net,任务的实现代码必须继承于ijob接口,然后在配置文件中对任务的执行周期等参数进行配置,任务即会在指定的时间或周期自动执行;
2.异常处理机制:异常处理机制终结于ui层,异常的终极处理采用aop思想,将对异常处理的实现置于basecontroller的onexception方法中,异常处理时,对于非继承于himallexception的异常将记录日志并返回友好错误消息,对于继承于himallexception的异常将直接返回基异常信息的具体内容;
3.权限控制机制:权限控制机制采用aop思想,在baseadmincontroller和basesellercontroller中的onauthorization方法中统一处理,每个action的权限均在对应的action上进行标记;
4.日志机制分为系统日志和操作日志:
系统日志:采用开源日志组件log4net,支持层级日志体系、可使用xml灵活的进行配置,本设计的系统日志分为三大级别:info、debug和error,三个级别的日志分别通过配置文件写入不同的目录,各级别的日志按天分文件记录;日志的内容主要包括日志记录时的时间、调用日志的方法名、相关自定义日志信息、相关堆栈信息;在本系统中绝大部分写日志的行为都是自动进行的,凡继承于himallexception的异常均会自动记录日志信息,所有未经处理的非继承于系统的异常均会在basecontroller中集中处理并记录日志;
操作日志:操作日志的载体是数据库,系统中所有重要的操作通过action上标记attribute的方式进行记录,记录操作日志的过程是异步的,使得日志记录的过程不会影响到用户操作的响应速度;
5.插件(策略)机制:核心层(core)中对通用插件接口(iplugin)进行了定义,所有具体业务插件接口都须要继承至iplugin;本设计使用策略机制的主要是缓存,默认提供两套缓存机制的实现(asp.net缓存与memcached缓存),通过在web.config中配置加载到系统中。