System Design
文章平均质量分 77
RayChase
博客搬家了: https://www.raychase.net/
展开
-
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(汇总帖)
J2EE核心模式学习汇总页: J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(一) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(二) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(三) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(四) J2EE...2011-05-15 21:33:00 · 139 阅读 · 0 评论 -
分页的那些事儿
最近同事在讨论一个关于分页的话题,我在此简单整理一下对于分页的认识。 首先,分页是什么层面上的事儿?是数据访问层面、业务层面还是展示层面? 对于数据访问层来说,具体说,对于查询接口,需要一个“from”参数和一个“to”参数,就可以做到获取查询结果集中特定的记录了,它不应该知道任何关于第几页和每页有几条数据这样的信息,这种信息应该是在上层的展示层面所关心的。 举例来说,有这样的接口调用...2012-10-13 19:53:05 · 117 阅读 · 0 评论 -
DAO的演进
这个思考源于最近项目中对DAO的使用和讨论。数据访问对象,在贫血模型下,要怎样去设计,框架需要完成什么,后续的开发人员需要关注什么,设计的时候到底需要把握怎样的粒度? 最早做项目的时候,是老老实实给每个必要的模型增加DAO接口和实现类的: public interface IUserDAO{ public long add(User user); ...2012-09-28 23:33:48 · 159 阅读 · 0 评论 -
用户积分功能的设计
有一个SNS应用,用户在使用的过程中积累积分,例如登陆+3点,个人空间每次浏览+1点,结交每个朋友+5点等等。同时,很重要的一点是,用户需要看到自己的积分累计有多少,能够根据积分划分用户等级,在自己的空间展示积分。 在用户量比较大的情况下(例如超过三千万),这是一个比较典型的读写都很频繁的问题,而且写入的次数可能和读取的次数差别不大(大多数SNS应用中,读次数远超写次数的场景居多,例如用户的状...2013-06-15 23:03:29 · 1948 阅读 · 0 评论 -
工作流模式(Workflow Patterns)学习参考资料
最近一直在学习有关Workflow的东西,包括Workflow的模式。 工作流(Work Flow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。 模式是一种对设计经验的总结和提炼,但熟知一个...原创 2012-04-14 17:17:54 · 578 阅读 · 0 评论 -
Web页面的聚合技术
近接触到了Mason,并且了解到了它基础之上的一个MVC框架实现,随即联想到做网站以来接触到的各种各样的页面聚合的场景,颇有意思。 页面聚合本身是一种“分而治之”的思想,把复杂的页面分割成可以被重用和独立维护的部分,这些部分的来源灵活,可以来自同一个web app中,也可以来自不同的域;可以聚合独立的子页面(页面集成),也可以聚合数据(数据集成),甚至可以聚合子呈现(模板集成)。 ...2012-04-11 01:10:06 · 809 阅读 · 0 评论 -
从后端设计来类比前端设计的思考
今天同事的一句话给我留下深刻的印象:“前端也有MVC,DOM树就是这个M,CSS就是这个V,至于C,非JavaScript莫属”。 很高兴团队中有越来越多的人能够跳出某种语言、某种平台的局限性,站到抽象的层次上思考一些设计上的问题。在我的印象中,似乎前端开发总是容易给人以随意、混乱的感觉,可真的是前端技能不容易掌握吗? “大学里Java课程正儿八经学了3年,JavaScript只字...2011-11-04 20:46:17 · 185 阅读 · 0 评论 -
Portlet
Portlet是基于java的web组件,由portlet容器管理,并由容器处理请求,生产动态内容。Portal使用portlet作为可插拔用户接口组件,提供信息系统的表示层。作为利用servlets进行web应用编程的下一步,portlets实现了web应用的模块化和用户中心化。portlet规范,即jsr(Java Standardization Request )168,是为了实现porta...2011-02-20 23:14:00 · 138 阅读 · 0 评论 -
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(七)
Web Service中转:暴露可通过XML和web协议访问的服务,并将对服务的请求转发给真实的服务组件。通常有许多Web Service是不希望暴露出来的,有时有一些服务又需要聚合起来使用,这时候就需要Web Service中转。在使用中转前的Web Service需要被改造,以支持中转的接口(例如一个本地接口)。这个模式和Facade很类似,只不过它的定位放在了远程接口上。 微架构:一...2011-02-20 12:50:00 · 108 阅读 · 0 评论 -
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(六)
集成层模式: 数据访问对象:Data Access Object。提炼和封装对持久化存储介质的访问。DAO封装了数据源的实现细节,总是面向API调用者提供统一的接口。DAO应当被实现为无状态的对象,这样就可以成为轻量的对象,不需要考虑线程、同步、缓存等问题,而把这些问题下沉到数据层去完成。 以我参与的项目的缓存的使用举例,模型DAO并不做任何的缓存行为,数据库使用自身的缓存能力,并且在必...2011-02-18 00:35:00 · 153 阅读 · 0 评论 -
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(五)
业务对象:利用对象模型把业务数据和业务逻辑分离开来。业务对象在最前端(客户端)和最后端(数据资源)都会进行业务数据形式的转化。业务对象的实现通常有两种方式:POJO + JDO 或者 Entity Bean + BMP/CMP。业务对象包含业务逻辑和业务状态。 J2EE系统中面向过程向面向对象转变有时甚至仅仅区别于最初的一念之差。没有什么是绝对的事情,如果业务非常简单,客户端通过浅浅的显示层,直...2011-02-15 00:08:00 · 101 阅读 · 0 评论 -
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(四)
业务层模式: 业务代表:Business Delegate。封装对业务服务的访问,隐藏服务层具体实现细节,主要为降低客户端和服务层之间的耦合。除了隐藏服务细节、处理服务异常等基础功能以外,还可以做服务的缓存。业务代表是客户端的直接客户,起到客户端业务抽象层的作用,而业务代表的另一头,常常连接着会话门面。 比较常用的情况就是在某种远程连接和业务处理的基础上,使用业务代表把这些细节统统包装起...2011-02-11 22:47:00 · 122 阅读 · 0 评论 -
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(三)
复合视图:Composite View。使用由多个原子化的子视图构成的复合视图。特点是组合是可以动态的,而页面布局又可以整体控制,和页面内容互相独立。 有这么几个常见的例子:Portlet就是一个复合视图结合的最好例子,主题可以影响到所有视图的呈现,又是和展示的具体内容没有关系的,Portlet可以在服务端做到视图的聚合,而不把事情遗留到客户端完成,不涉及浏览器跨域的安全性问题;SiteMesh...2011-02-10 23:30:00 · 100 阅读 · 0 评论 -
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(二)
我看的资料和这幅图有一些出入。 资料要去这里找:http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html 表现层模式: 拦截过滤器:Intercepting Filter。正如图中的“Apply zero or more”和Servlet规范所述一样,应当具备一个链式结构。这个链式结构中的每个fil...2011-02-09 23:27:00 · 128 阅读 · 0 评论 -
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(一)
第1章:导论。 模式能够: 利用一个经过验证可行的解决方案; 提供一套通用词汇; 约束解决方案的空间。 第2章:表现层设计考虑和不佳实践。 客户端验证:基于表单的验证、基于抽象类型的验证。 曾经在JSP中滥用过的助手类,通过助手类在页面和业务逻辑之间传递数据,有点类似于如今Struts中的Action作为传值模型时的情况。 表现层不佳实践: 多个视图中都包含控制代码; 表...2011-02-08 23:47:00 · 99 阅读 · 0 评论 -
Flash Scope
项目中遇到了一个潜在的问题,大致就是说,在一个流程的两个或某几个环节中,需要短暂地存储一部分对象(如果不存储,就需要在这几个环节中多次调用同一个外部接口,这被认为是不够合理的实现)。 而这部分对象的存储: (1)如果用request,太小,毕竟一次提交以后就丢失了,如果需要往后传递,可能需要借助一些页面参数传值等丑陋或是不易控制的方法; (2)如果用session,太大,我不需要在整个用户会...2011-01-26 23:12:00 · 175 阅读 · 0 评论 -
留心那些潜在的系统设计问题
在系统设计阶段考虑全面很难,有许多人倾向于把整个设计分成若干阶段,在迭代中完成整个设计,这本身是非常好的,但是,就如同“先做出来,以后再优化”这样的经典谎言一样,本身并无错,只是许多程序员都不习惯于真正的迭代设计和迭代优化。举例来说,有一个日益复杂的类,每个人都修改一点点,一直到最后都没有人愿意去做重构,大家的心态都是一样的:“我只修改了一点点,为什么要我去动那么大的刀,于我没有任何好处”。我不...2013-09-19 23:37:26 · 204 阅读 · 0 评论