Matt Can Code  
公告
  • 昵称:Matt Yeung
    园龄:5年
    粉丝:0
    关注:0
日历
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910
统计
  • 随笔 - 12
  • 文章 - 0
  • 评论 - 19
  • 引用 - 1

导航

搜索

 
 

常用链接

随笔分类

随笔档案

yuwen16水深火热的OOA/D

最新评论

阅读排行榜

评论排行榜

推荐排行榜

 

2007年5月11日

介绍自定义安全管理框架的  数据结构 

目的:1. 对安全管理提供更强大的扩展性和伸缩性。2.提高权限验证算法效率。

 

以下对传统的安全管理数据结构和安全管理框架的数据结构进行大致比较

 

传统的数据结构中

1.         左数第一列为各样安全管理主体, 分别是USER, USERGROUP, ROLE, FUNCTIONGROUP

这些安全管理主体类型的数量以及定义 因不同项目定义各异, 有可能衍生其它主体或只需要其中某些而已,存在伸缩性。

2.         左数第二列为第一列安全管理主体之间的关系类型。 例如 用户组中组合用户(UserGroup_User, 因为第一列存在的不确定性, 引致此列上的类型数量以及定义也存在不确定性。

3.         左数第三列为任务, 和第二列一样,因为安全管理主体的不确定性,也是有可能改变的数据类型。

4.         只有第四列task的定义相对稳定。

 

(图一)

 

以下是自定义安全管理数据结构对以上123项的不确定性做出的重新设计

数据结构:

1.       把图一第一列的各样安全管理主体类型(USER, USERGROUP, ROLE, FUNCTIONGROUP)抽象为主体类Party, 他们之间的区别用Party中的PartyTypeId 表示, PartyTypeId 外关联到  PartyType 表中的PartyTypeId 这样,无论主体数量如何更改和定义,也无需变动数据结构。User 表关联到Party,  是因为User是一个特别的主体(Party), 有必要存储其更多的属性。

2.       对图一第二列提出的不确定性用PartyToParty数据结构解决,各种安全管理主体之间的组合关系抽象为PartyToParty,  同样也适应了主体类型的变化引起的组合关系变化。

3.对图一第三列提出的不确定性用PartyTask数据结构解决,各种安全管理主体和任务之间的组合关系抽象为PartyTask,  同样也适应了安全管理主体类型的变化引起的主体和任务之间的变化。

4.最后是PartyTypeConstraint,它的意义在与约束属于某类型(PartyType)的主体(Party)组合其他类型主体,例如 PartyType(类型)为用户组的主体只能组合PartyType(类型)为户的主体。

 

 

实现形式

1.       在菜单上选择新建安全类型:

2.       填写相关数据,指定该类型能包含(聚合)的其他类型,例如用户组包含用户,选择用户类型

3.       保存后, 菜单上自动增加了一个允许新增用户组的菜单项

4.       进入新建用户组后,看到左图的下拉框能看到第2步选择的包含类型及其实例。选择用户组的用户(这里选择的是Matt)作为此用户组的成员,并授权此用户组能实现的功能(这里选择的是UpdateItem)。最后进行保存。

5.       以下是按照1-4步骤再建立的功能组

 

6.       菜单中新增了“新建功能组“

7.       “所有安全类型主体中能选择用户及用户组的成员

 

 

posted @ 2007-05-11 09:58 Matt Yeung 阅读(134) 评论(1) 编辑

2007年4月30日

特点 aspx页面中的部件属性注入表达式构造器(expressionBuilder)返回的表达式对象,使部件属性在运行时得到赋值。

 

表现形式<asp:Button ID="Button1" runat="server" Text="Try this"  Enabled="<%$ Authenticate:AddItem %>"/>

Enabled 就是实现权限验证的代码, 返回的值可使该控间可见或不可见,不需要codebehind的代码支持。AddItem 是参数,是该权限的名称。

 

优点

1.节省大量codebehind中重复众多的校验代码:

以往在用户界面控制执行权限的方式一般控制按钮是否可见或是否使能(enable),

如果该用户拥有权限的话, 按钮就可见或enabled 否则相反, 现在这一步可以省略,

代码变得干净,有利于提高维护和开发的效率。

 

实现步骤:

1.   aspx上拖出一个buttonImageButton


2.
编写继承System.Web.Compilation.ExpressBuilder的类型,并复写GetCodeExpression函数。在里面可以接受参数并对参数进行验证操作,并返回含有该结果值的codePrimitiveExpression对象


3.
web.config中放入类型映射

     <compilation debug="true">

              <expressionBuilders>

                   <add expressionPrefix="Authenticate" type="BusinessLogic.Security.ExpressionBuilder.AuthExpressionBuilder"/>

              </expressionBuilders>

</compilation>

其中Authenticate 是假名alias,指向第二步指的类型

 

4.点击ASPX上的button,进入属性Expression, 选择Enabled属性,可看到右边表达式类型出现在web.config里注明的假名

5.在表达式属性里加属性值

6Aspx 内容 成为表现形式<asp:Button ID="Button1" runat="server" Text="Try this"  Enabled="<%$ Authenticate:AddItem %>"/>

7 运行结果

 

 

(应用在菜单项控件的效果, 令新建项1 disable

posted @ 2007-04-30 12:11 Matt Yeung 阅读(568) 评论(10) 编辑

2007年3月6日

 

OA的机器配置控制中,我们需要管理机器基础数据和由此数据产生的机器实体,知识层在此分析方案中得到了应用

 

如图所示一种部件类型会被多个机型使用,一个机型也必需多种部件类型,装配时机型必须集合符合它的部件类型标准的部件,部件的数量记录在单量里, 这看似两个多对多的关系(部件类型和机型, 机型和部件)如何简化并能正确表达它们之间的关系?

 

部件看似和机型是多对多的关系,但仔细一想,没有部件类型和机型的关系(多对多),部件就没有存在的价值。所以,部件应该是部件类型和机型关系类的制品, 所以实体类会产生为

posted @ 2007-03-06 16:56 Matt Yeung 阅读(59) 评论(0) 编辑

2007年2月26日

Factory Design Pattern(FDP) is comparatively small in granularity than either Simple Factory or Abstract Factory, one kind of

factory produce one and only one kind of production.

The abstract of FDP is to let the subtype of factory decide the particular type of its production.
Usually you may see kind of parallel evolution in types both in factories and productions.

Here is a analogue in real life that I have conceived in my head for so long that can describe this Design Pattern. a Mother can produce a baby, this is a common sense, so I am analogizing mother as a factory(by no means an insult to a mother), a specified kind of mother can produce a specified kind of baby, a more specified kind of mother can produce a more specified kind of baby.





Actually a mother who can give birth to a baby boy can also give birth to a baby girl, FURTHER MORE, mother who create children of special type that can and only can interact with their counterpart, for example, korean girl can and only can play with korean boy, this is when Abstract Factory comes into play.
 

 

In the early blog issue 典型的组合模式和迭代器, iterator is also a product which is produced by Factories like ArrayList,  SortedList, Collection and consumed by the client who has the access to the Factory and the product, and the product in this special case encapsulated the data structure of the Factory, pretty much a hybrid of Bridge and Factory.Do you agree?

posted @ 2007-02-26 15:22 Matt Yeung 阅读(57) 评论(0) 编辑

2007年2月12日

1.生成临时表,
CREATE  TABLE #tblPK(
           PK ' + @type + ' NOT NULL ,
           [Sequence] [int] IDENTITY (1, 1) NOT NULL)
INSERT #tblPK (PK)
SELECT '  + @PK + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '
把排序好了的数据表的主键插入其中,并使临时表自动生成序列号

2.根据传进来的页数计算需要提取的记录序号
SET @strPageSize = CAST(@PageSize AS varchar(50))
SET @strStartRow = CAST(((@PageNumber - 1)*@PageSize + 1) AS varchar(50))
SET @strEndRow = CAST(((@PageNumber - 1)*@PageSize + @PageSize) AS varchar(50))

3.合并查询
SELECT ' + @Fields + ' FROM ' + @Tables + ' JOIN #tblPK  ON ' + @PK + ' = #tblPK.PK ' + @strFilter1+ ' ' + @strGroup + ' ORDER BY ' + @Sort


/Files/Mattcoder/Paging.rar

posted @ 2007-02-12 09:13 Matt Yeung 阅读(326) 评论(0) 编辑

2007年2月8日

摘要: 聚簇索引和非聚簇索引都是为了增加数据检索速度而存在的.在配置上, 每个表只能有一个聚簇索引,而能有200多个非聚簇索引。在物理分配上, 每个表的数据都是分配在页上,一个页大概有8k左右,假设一条数据占1000字节的话,那么8000条数据占8000*1k/8k = 1000页面,这些数据存在于数据块中。如果对这些数据中的某一10字节的字段做聚簇索引的话,8000 * 0.01K /8 = 10 页面...阅读全文
posted @ 2007-02-08 14:10 Matt Yeung 阅读(4522) 评论(5) 编辑

2007年2月2日

摘要: MARTIN FOWLER 在 Accountability 分析模式中详细地列举了一个根据需求演变的分析过程在一个企业架构图里, 最简单莫过于公司包含部门,部门包含人这样的结构适合结构改变可能性小,而公司,部门和人三者的行为有很大区别时使用(类型是一种奢侈品)反过来说,事实上大多数结构还是会有一定变动的,比如部门和人之间加入了组的概念,那么原来部门组合人的聚合就完全推翻了,如果公司,部门,组和人...阅读全文
posted @ 2007-02-02 15:37 Matt Yeung 阅读(91) 评论(0) 编辑

2007年1月19日

摘要: DATAMAPPER提供了对象和SQL执行语句执行结果之间的映射.IBATIS的DATAMAPPER除了实现以上映射外,还可以根据配置生成数据连接对象和数据访问对象功能,并实现了面向数据库编程的封装,让程序编写人员关注SQL语句的编写和对应的映射。IBATIS的缓存策略非常简单,配置一个DICTIONARY,KEY记录了连接字符串和查询语句,VALUE就是一个该查询语句返回的ILIST的对象。DA...阅读全文
posted @ 2007-01-19 09:13 Matt Yeung 阅读(82) 评论(0) 编辑
 
摘要: 组合模式体现了接口对外行为的统一,类的继承,行为的复写,迭代器体现了数据的封装。INode接口统一了节点的操作, 客户可取得一个实现了INode的类型的实体进行操作,而无需理会实体的实际类型是什么。而这些操作就由LeafNode和CompositNode具体地实现Iterator接口定义了迭代器的行为,聚集节点把自己数组交给迭代器并交给客户使用,目的是把Array的类型和结构隐藏起来,限制了客户对...阅读全文
posted @ 2007-01-19 09:03 Matt Yeung 阅读(145) 评论(3) 编辑

2007年1月17日

摘要: 1.View - Specifically used for displaying datamodel, sending command requestfor nextactionand nothing else.2.Controller - Isolate the data request from the view; decide whichdatamodel should beready a...阅读全文
posted @ 2007-01-17 10:35 Matt Yeung 阅读(41) 评论(0) 编辑
 
Copyright © Matt Yeung Powered by: 博客园 模板提供:沪江博客