您好,欢迎访问三七文档
OA第一天.1、OA可以用在2个地方.a)政府b)企业c)采用OA就是把他们的流程做成一个软件.2、需求分析从界面入手,但是写程序别从界面入手.a)分析设计实践.3、Java三件宝a)框架SSH.b)模式.学习的是它的适用领域.c)领域模型.i.最重要的,当你获取需求以后.需要使用面向对象技术开发领域模型.4、按模块进行迭代开发.a)进一步细化需求.b)用例模式.c)分析模式(概念模型)最重要的.d)设计模式对分析模式的细化.e)实现.所有的设计模式都是和实现相关的.f)测试,5、分析.a)需求分析.i.它们必须是正确的.ii.它们必须是可行的.iii.它们必须是对项目来说是必不可少的.iv.它们必须是被标明优先次序的.v.它们必须是不含糊的.vi.它们必须是能够ioubei证实.vii.一旦需求确认以后,没有写的不能做.b)需求分析具体过程(切入点).i.了解客户.ii.了解业务.iii.了解行业.iv.了解同行产品.v.这些事情在与客户正式开始沟通之前就尽量了解,这样在与客户交流时有效的减少在业务上的陌生感,会尽快使客户对项目团队产生必要的信任.6、OA系统的需求.a)基本模块i.组织架构.ii.权限管理.b)核心模块.i.公文流转.1.例如报销:如何把一个数据,转给另外一个人.c)其他次要模块.7、流程定义:就是例如以前没有请假单流程,自己可以加一个部署到项目.a)DOJO书.i.是一个javascript的树.8、hibernate.hbm2ddl.auto.create.hibernate.hbm2ddl.auto.updatea)当你创建SessionFactory实例时,它会根据你的映射文件导出到数据库里.OA第二天.1、如何定义接口?a)主要看客户端的需要.例如:dao层的客户端就是manager层.2、如何读懂需求?a)理解需求中的概念.b)例如:考勤你得了解过程,还有什么报表,现有的软件.3、组织机构.a)职能型组织架构.大公司,分部门.b)公司人员部销售部开发部张三李四开发小组1i.PersonOrganization1*1*1*+parent1+children*这个图就是上面的概念模型图.c)集权型组织架构中小型公司,一级管一级,不分部门i.Person1*+parent1+children*d)混合型组织架构前面两种混合起来.人下面有部门,部门下面有人,在某种情况可以把他们俩看成一个概念,进行泛化(继承)i.OrganizationPersonparty1*+parent1+children*e)网状组织架构也叫矩阵型,通常用于跨国大型企业.i.关联会有一个时间的限制.ii.多对多一般会拆分成两个多对一的关联,应该把中间的关联表抽象出来进行扩展.1.中间表对应原来表肯定是多对一,中间像两边任何一边看都是多对一.可以在中间表加一些自己的需要的属性.iii.规则就是它们类型的多对多,也就是两个多对一.例如:1.部局处科.,,他们分别的父亲都是上一级,子都是下一级.iiii.PersonOrganizationTimeLimitPartyStructPartyMM1*+parent1*1*+child1*PartyTypePartyStructType1*1*1*1*PartyStructType和PartyType是知识级PartyStruct和Party是操作级按照某种职责来建立partyType,4、合适的uml用例一般最好是少于10步和10步左右的,才是一个粒度的,合适的用例a)用例其实也就是功能性的需求.b)要编写用例文本,参与者的动作,系统的响应,主要路径和扩展路径.c)主要路径.i.写主要的内容.d)扩展点i.写一些异常信息,例如删除失败,取消操作之类的.e)补充说明i.主要是用来做补充的,例如添加机构时,ID生成的规则之类.5、在ssh里避免一个Action方法里,和业务逻辑组件进行2次交互,不然会造成事物不一致.6、画顺序图实际上就是在实现,画的时候是根据用例图文本里的主要路径OA第三天.1、开发流程做一点测一点,首先根据领域模型对象创建实体.因为它是被依赖的.采取自底向上的实现.2、Hibernate为什么要强制定义inverse呢?a)只有这样,才能强制保证在多的一端维护,如果强制在一的一端维护,则无法运行.b)最主要的是在更新的时候,如果不设置inverse,在维护的时候会更麻烦.i.还是学生–---班级,当你更新一个班级时,如果班级里只是从ActionForm里获取数据,但是更新了以后此时学生集合是空的,它会去掉学生与班级的所有关联关系.3、切记Hibernate的get加载的是一个代理对象.4、在测试单元类中,可以继承测试父类.在setup中打开session,避免sessionClosed异常.因为在测试类中,并不能使用OpenSessionInView.a)继承父类AbstractTransactionalSpringContextTestsi.需要实现getConfigLocations.ii.注入业务逻辑层对象,它会自动注入,根据类型.b)加入spring的spring-mock.jar包.c)当一个方法调用完,它会自动回滚事物,和关闭Session.如果想提交事物的话,调用setComplete().5、状态图最好用在页面的流程分析.a)每一个状态代表一个页面,也就代表调用了一个action,因为在struts中,进入一个页面都是要经过struts.6、切记strutsActionMappings里的scope是代表的是actionform存储的范围.OA第四天.1、Struts配置文件里Action的attribute属性是用来给Form重新命名的,在jsp页面就可以用重新命名的名字来取值.2、没事别从form取值,在存在request里,在下一个页面直接从form取就行了3、切记struts刷新请求会重复提交.a)因为当你请求一个Action时,它会把你的请求做为此页面的url,你如果刷新,它不会加载页面,会重复提交你的请求.b)要切记Action也可以自己顶一个Forward,用来跳转.4、模态窗口.a)当使用模态窗口时,此时只能对子窗口做操作,不能对父窗口操作.b)window.Locale…xxxx代表父窗口.5、一般的删除操作.a)一般的是打开一个新窗口,可以避免了任何问题,例如传参数,刷新重复提交之类的问题..6、Struts局部异常配置会根据input的路径来转发.OA第五天.1、了解taglib-pager分页标签.a)主要是帮你生成主页下一页的连接的.b)当生成以后它会把值存在page范围,名字是${pageUrl}c)如果想使用页码变中间的那种,例如goolge,可以使用pager标签里的pages,生成之后的Url就存在page属性的pageNumber里.d)当前页数也存在pageNumber里,会有冲突,我们可以使用pager的export来给它重命名.例如export=”currentPageNumber=pageNumber”,这样之后,我们也可以实现goolge的分页时候不能连接到本页,直接判断currentPageNumber和上面的pageNumber(中间显示本页).e)如果需要设置参数,可以直接使用pg:param标签,可以直接name=parentId,如果不设置值,它会从request里获取parenjtId.f)具体详细参见–taglib-pager使用说明.txt2、分页–a)需要传一个当前页数,而且需要一个每页显示的大小.b)查询完查询的是一页的数据.3、数据的封装,抽象找出相同的,重复的过程,把需要的参数之类的东西全部定义成方法的参数.4、截取字符串包头不包尾.,截取时不算最后一个,得算上第一个.5、在J2EE中,要考虑多线程影响变量的问题,如果要共享变量,尽量使用ThreadLocal,不会有线程安全的问题.6、如果要把Object转换成整形时,千万不要直接写intI=(Intger)Object.这样有时候会抛异常,因为你首先把一个Object转换成Integer.没任何错误,但是当Integer转换成整形时,JDK会自动解包,所以会出错NullPointException.7、Xdoclet可以解决手工编写映射文件.OA第六天.1、权限控制三元素:主体(who)、资源(What)、操作(How)、组角色时间地点模块文件、目录数据库、记录类的方法Who主体(Principal)How操作(Operation)What资源(Resouce)********C/R/U/D发布用户2、RBAC模式.RoleBaseAccessControll.a)RBAC-0.永远都不允许直接把权限赋予给用户.i.b)RBAC-1.在RBAC-0上做的扩展.i.c)RBAC-2,也是在RBAC-0上进行了扩展.在进行用户和角色之间建立一种约束.i.例:角色根另外一个角色授权有冲突,根据某种规则,不允许这个角色分配给这个用户.ii.d)RBAC3=RBAC1+RBAC2.i.3、权限的设计.a)b)因为ALC表被读取的频率很大,所以要放在Hibernate缓存里,但是如果它里面变量是对象的话.那么里面对应的对象也得存进缓存里.所以现在给它改变一下,c)主体类型可以取角色和用户、d)aclState.如何在ACL扩展(操作/c/r/u/d)呢?不要采用一个字段代表一个操作,我们可以使用一个整形,后四位标识c/r/u/d,一个整形是32位,只有0和1,0代表不允许,1代表允许.e)aclTriState.表示当我单独给用户授予权限时,此时用户的角色是否有效.我们也采用一个整形,这个额外状态位用-1表示针对用户的授权无效,0表示有效.一个整形32位,只有0和1,1表示不允许,0表示允许OA第七天.1、了解UniqueResult方法的作用,如果查询不到对象,就返回null,如果查询到两条,则抛出异常.2、一定要注意责任分配模式(GRAPS).3、如果一个地方要用到常量,写死,最好定义一个变量,免的以后换的时候要换好多处.4、IFELSE判断哪个有个原则,要尽快返回,哪个先返回,就判断它,例如acl不等于null提前返回,我们就IF(acl!=null)5、切记操作属性,或者读取时,不应该改变属性的状态6、MAP的存储方式,如果key一样,后面的会把前面覆盖掉.7、获取用户拥有的权限读取查找方式.a)从低到高的级别查询,然后在查询用户是否继承了角色,b)因为我们采用的是map存储方式,所以必须从低到高,例如1允许,2不是允许,2比一高,先查1的,放进map,在查2一看不允许,我们可以立即放到map里覆盖到1.8、切记ACL表里可以存储用户和角色.OA第八天.1、使用document.location.href=”url”,完了以后会自动刷新a)例如:我设置分页的自动加入每页显示行数,我直接可以使用这个url传输到action查询全部,页数得显示在第一页,当它查询完返回到首页会自动刷新,意思是还会回来到当前页面,我们就没必要传输一些数据.2、xml解析,dom方式支持比较小的文件,而SaxReader支持比较大的文件.3、在AJAX中,一般返回的数据就两种,数组或者JSON.a)下面4的介绍就是对JSON数据的描述,在JAVA中,这样访问就是MAP.4、在javascript中如何访问名值对呢a)例:varv1={username:张三};b)访问方式为v1[username]或v1.password5、如果要在javascript中调用一个bean的方法时,方法参数要接受的是一个对象的话,那我们得在dwr.xml中采用convert标签进行类型转换.6、DWR集成spring,以前careator写new现在直接写spring即可OA第九天.1、所有继承D
本文标题:OA项目介绍
链接地址:https://www.777doc.com/doc-11926 .html