Edu-CRM 框架设计

序言

本文写于Edu-CRM开发之前,现其中的功能大部分已经实现,实现时稍有不同,但基本思想不变。

 

设计要求

  • 支持多Tenant
  • 支持多语言
  • 支持数据版本
  • 支持自定义字段
  • 支持自定义查询
  • 支持数据导入导出

总体设计

clip_image002[4]

  • 利用Cache加快访问Localize和Metadata的速度
  • 对于固定的数据使用DLINQ来进行查询,返回对象
  • Metadata的定义采用name-value pair的方式
  • 对于高级查询或者通用查询将使用Dynamic Query的方式,返回name-value pair
  • 在系统中任何地方都需要通过支持多语言(如Metadata定义)
  • 支持一定格式的数据导入导出(Excel,CVS等)
  • 数据的修改需要通过Version来进行控制,能进行各种版本操作

详细设计

Metadata

数据库的设计将采用固定表的模式+Metadata数据库 + name-value Pair的方式

Metadata数据库存储数据库的结构(包括固定表和扩展的字段)

Name-value Pair的方式仅存储扩展字段的值

clip_image004[4]

可以参考《SAAS多用户数据体系结构》

  • CRM数据库的所有字段都在Metadata数据库中有定义,如果是CRM基础数据表或字段则定义不能被修改。
  • 可以在Metadata数据库中定义Entity(表)
  • 可以扩展现有Entity的Property也就是表中的字段
  • 字段有类型、长度、校验表达式(客户端和服务器端)、是否可以查询
  • 需要根据字段的类型处理该字段的Default Value,如字段类型为List,则DefaultValue为1,2,3,4,5
  • 可以定义Entity之间的关系
  • 数据采用name-value pair的方式进行存储
  • 对于数据量比较大的Entity可以单独定义一张表进行存储数据

自定义查询

自定义查询涉及两个问题:

  1. UI(可以参考Microsoft Dynamic CRM)
  • 可以让客户很容易的进行查询的自定义
  • 能够支持AND、OR、Equals、GreaterThan、In、Like等操作
  • 能够选择Entity以及Properties
  • 能够将用户自定义的查询进行存储

   2.  后台

  • 能够将UI的查询翻译成SQL进行查询
  • 返回的数据格式

基于以上的两个问题设计思路可以考虑使用XML树。

XML比较容易存储,利用树形来设计UI,设计一个类能够将XML树转化成SQL,返回的数据格式可以采用name-value pair的形式。

XML数据格式如下:

clip_image006[4]

对应的SQL:

select ac.subject,ac.activityid,ac.scheduledstart,ac.regardingobjectid,ac.prioritycode,ac.scheduledend,ac.activitytypecode from activitypoit as ac

join activityparty as aa

on ac.activityid = aa.activity

join systemuser as ab

on ac.owninguser = ab.systemuserid

where (ac.statecode in (0,3)) or (ac.activitytypecode <>'4404')

aa.partyid='XXXXX' and ab.address1_city = 'ss'

多语言

  • 可以根据不同的客户自动选择应用程序的语言,判断顺序如下:
  • url,也就是query string (?loc=zh-cn)
  • Cookie,也就是用户上次选择的语言
  • 浏览器设置的语言
  • 显示默认的语言
  • 确定语言之后就需要显示Localize,在这里还需要考虑多Tenant的问题,具体的判断是先查找该Tenant的Localize,如果没有则使用默认的Localize
  • 给用户提供UI可以进行翻译
  • 使用缓存(web可以生成静态js文件;客户端程序则下载到本地,每次判断有无更新即可)

clip_image008[4]

导入导出

  1. 在Grid控件上提供导入导出功能,根据Grid的数据源进行处理
  2. 提供通用的导出功能,可以选择导出的Entity,Properties,设定过滤条件进行导出,参考【自定义查询】
  3. 提供通用的导入功能,在导入时需要选择Entity,进行Property mapping,设定匹配原则。如果根据匹配原则找到的结果大于1,则需要进行人工操作
  • Property Mapping采用如DTS的数据Mapping方式
  • 如果存在重复数据时则可以使用列表方式来显示导入数据。选中一条导入数据可以查看数据库中和该条数据匹配的记录,可以选择其中一条数据进行更新

     4.  导入导出数据格式转换,如F-Male(男)

     5.  导入导出的方式可以为Excel、CSV、Web Service、XML

数据版本

  • 用户可以配置哪些Entity需要进行版本记录
  • 版本库可以通过ChangeSet进行查看每一批修改内容
  • 版本库可以根据Label进行提取一系列数据
  • 数据回滚也将通过ChangeSet增加一批修改记录

clip_image010[4]

缓存技术

服务器端缓存

  • Metadata数据可以在内存中进行缓存
  • Localize数据可以生成静态文件
  • 对于系统运行时数据进行缓存

Web Browser缓存

  • PersistJS(Flash、Gears、Cookie、IE User Data etc.)
  • SilverLight Isolated Storage

第一个打分

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5