- 浏览: 26625 次
- 性别:
- 来自: 上海
最新评论
-
ldd600:
写的不错,可以适当的展开一些,比如企业架构中常用的分层模式,以 ...
设计分层架构的步骤(一) -
liberD:
这也正是我需要考虑的,希望楼主继续加油!期待楼主针对这个问题展 ...
设计分层架构的步骤(一)
文章列表
在Linux中配置vsftpd
- 博客分类:
- Study
一. 环境
OS: Redhat Enterprise Linux 5
VMware workstation
二. 安装
1. 连接光驱
Redhat里会自带vsftp的rpm安装包,所以首先需要把Redhat的安装文件挂载到系统中来。首先在VMware设置中将光驱的Device status 中俩勾选框勾选,然系统启动时连接 ...
敏捷联盟宣言:
1. 个体和交互胜过过程和工具
2. 可以工作的软件胜过面面俱到的文档
3. 客户合作胜过合同谈判
4. 响应变化胜过遵循计划
Java的动态代理实现
- 博客分类:
- Java EE编程
1.
问题
在许多情况下,我们需要使用代理模式来解决问题。如下为代理模式的类图。
如下为使用
Java
实现代理模式的一个例子:
package com.demo.dynamicproxy;
public interface IHello {
public void sayHello() ;
}
package com.demo.dynamicproxy;
public class HelloProxy implements IHello {
private IHello ...
最近要求实现Audit Trail Framework
,简单的说就是记录业务数据的修改,以便以后查询谁,在什么时候,做了什么的修改。比如,Supplier
有个属性叫做Name,
如果一个用户 A
于今天2
点将一个Supplier
sp1
的Name
从a
改成b,
那么就要记下来该用户A
在今天2
点将Supplier sp1
的Name
属性从
a
改成了b
。
业务中将这些修改称作Amend Log
,针对某个业务对象,可查看其Amend Logs
,如对某个Supplier
,其展示给用户的显示模式如下:
Actio ...
Spring Ioc容器是Spring的核心,其中BeanFactory定义了IoC容器的基本功能,所有Ioc容器实现该接口。其最重要的是getBean(),它是BeanFactory的主要方法,通过这个方法,可以取得IoC的容器管理的Bean。我们所熟悉的ApplicationContext也是实现了该接口。
下面是BeanFactory接口的源代码:
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) ...
问题:
在项目中,我们常常会实现Report功能,通常使用Native SQL Query返回查询的数据集,而这些数据集是Raw typed,Query的调用者获得这些原始的数据集后需要显示地将其转化成强类型的Java Bean类,如何减少这些繁琐的转换呢?
解决方案:
将原始数据集的每条记录根据一定的规则将其自动映射成Java Bean 对象,比如为Query 返回的列名在Java Bean类中查找匹配的字段(忽略_,空格,大小写,等), 使用反射将该列的值赋值到Java Bean的字段中。
Spring 中为我们提供了一个现成的类用来实现此功能的类-BeanPropert ...
当运行一个.NET应用程序时,OS会先建立一个进程,检查PE文件,执行PE文件中的.text段中的code, 在托管程序编译时,.text段里面增加了一条JMP_CorExeMain或JMP_CorDllMain指令(根据是exe文件还是dll文件不同)。若是非托管程序,就进入到 ...
.NET程序集导入过程分为两个部分,一个是通过Assembly Resolver找到程序集,随后通过Assembly Loader将其导入。
Assembly Resolver 首先运用Version Policies来确定最终的程序集版本。Version Policy可以在三个级别指定,分别是应用程序级别,组件级别和machine级别。每一级都可以通过bindingRedirect将版本重定向,且低级的输出是高级的输入。当Assembly Resolver决定哪一个版本将会被导入后,将定位到确切的程序集文件。首先在Global assembly cache里查找(assemly na ...
Database Change Notification is a feature that enables client applications to register queries with the database and receive notifications in response to DML or DDL changes on the objects associated with the queries. The notifications are published by the database when the DML or DDL transaction ...
你应该只有在需要的时候才将层和组件分布到不同的物理级上去。分布式部署的通常原因包括安全策略,物理限制,共享的业务逻辑和可测量性。
在Web应用系统中,如果你的表示组件以同步方式访问你的业务组件,考虑将业务层和表示层的组件部署到同一个物理级上去以获得最大的性能和简易的操作管理,除非安全限制两层之间需要有一个可信边界。
在胖客户端应用系统中,UI处理在客户端,出于安全和简易的操作管理方面的考虑,你可能会倾向于将业务组件部署到一个独立的物理级上。
将业务实体部署到与使用这些业务实体的代码相同的物理级上。这将意味着可能将他们部署到多个地方;将数据实体副本部署到其中的程序逻辑使用了 ...
有很多不同的方式可将功能相关的组件划分到同一层中。在业务系统中最通常的方式就是将表示,服务,业务和数据访问功能拆分到不同的层中。还有些应用系统同时包含报表,管理或基础架构层。
要小心地增加额外的层,如果这些层不能为相关的一些组件提供一个逻辑组,从而为你的应用系统增加可维护性,可量测性或可适应性,那么就不要增加它们。例如,如果你的应用系统不发布服务,那么一个独立的服务层将不需要,这时仅仅需要表示层,业务层和数据访问层就可。
Every object in the CLR begins with a fixed-size object header. The Object header has two fields. The first field of the object header is the sync block index. The second field of the object header is a handler to an opaque data structure that represents the object’s type. Every instance of a given t ...
Non-interface types that do not specify a base type get System.Object as their base type. Declare a type as sealed prohibits the use of the type as a base type. Declareing a type as abstract, on the other hand, disallows direct instantiation of the type and makes it useful only as a base type.
The ...
There are three fundamental kind of type members: fields, methods and nested types.
The field of a type control how memory is allocated. The CLR will allocate memory for static field once: when the type is first load. The CLR will allocate memory for non-static(instance) fields each time it allocate ...
选择你的分层策略(完)
如果是逻辑分层,相互交互的层将会部署到同一个物理级上并且在同一个进程中运行,这样你就可以充分利用高性能的交互机制,比如通过组件接口直接调用。然而,为了维护逻辑分层的优点和将来的可适应性,你必须小心地维护层间的封装和松耦合。
对那些逻辑层被部署到分离的物理级上的情况,相邻层间的通信将经由链接的网络发生,并且你必须确保你选择的设计能支持通信延时,且是松散耦合的。
决定你应用系统的哪些层被部署到分离的物理级上,哪些被部署到同一物理级上也是你分层策略中一个重要部分。为了维护可适应性,总是要确保层间的交互是松散耦合的。这将使你能够利用将层部署到同一级上时具有高性能 ...