WEB开发网
开发学院WEB开发ASP.NET Rails系统重构:从单一复杂系统到多个小应用集群 阅读

Rails系统重构:从单一复杂系统到多个小应用集群

 2010-10-09 08:15:34 来源:WEB开发网   
核心提示: 示例程序示例程序是一个简单的在线学习系统,用户在线购买和学习课程,Rails系统重构:从单一复杂系统到多个小应用集群(4),按照业务逻辑将系统拆分成四个应用,分别用于课程信息管理(course)、用户注册登录及帐号管理(user)、订单系统(purchase)以及在线学习系统(learning)

示例程序

示例程序是一个简单的在线学习系统,用户在线购买和学习课程。按照业务逻辑将系统拆分成四个应用,分别用于课程信息管理(course)、用户注册登录及帐号管理(user)、订单系统(purchase)以及在线学习系统(learning)。这几个Rails应用中各自业务的实现比较简单,不再赘述。

Rails系统重构:从单一复杂系统到多个小应用集群

查看原图(大图)

只读数据库

在示例程序中,用户需要购买课程后才能开始学习。由于我们对系统进行了拆分,订单和课程在两个不同的应用中进行管理,而用户下定单时需要查看课程列表,这就涉及到一个应用(purchase)如何获取另一个应用(course)数据的问题。

最直观的做法是course提供一个service,purchase调用这个service来取得课程列表。但service调用效率比较低,代码处理也比较复杂,所以应该尽量避免使用。我们仔细分析一下这个需求就会发现,在purchase显示的课程列表逻辑上很简单,只需要知道课程的名称、价格等基本属性就足够了,所以可以考虑直接从数据库读取这些信息。

由于系统拆分后每个应用都有独立的数据库,所以我们需要给purchase中的Model类设定指向course的数据库连接。代码如下:

# purchase: /app/models/course_package.rb: 
class CoursePackage < ActiveRecord::Base 
 acts_as_readonly :course 
end 

这样CoursePackage除了数据库指向不同外,其他和普通的Model一样。

# purchase: /app/views/orders/new.erb.html 
<ul> 
<% CoursePackage.all.each do |package| %> 
  <li><%= package.title %> <%= package.price %></li> 
<% end %> 
</ul> 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Rails 重构

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接