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

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

 2010-10-09 08:15:34 来源:WEB开发网   
核心提示: app:course#名称,应用在系统中的唯一标识url:example.com/course#urlapi:course_list:package/courses从上文可以看出,Rails系统重构:从单一复杂系统到多个小应用集群(6),通过只读数据库,我们可以完全无缝地读取其他应用的数据,这样

app: course #名称,应用在系统中的唯一标识 
url: example.com/course #url 
api: 
 course_list: package/courses 

从上文可以看出,通过只读数据库,我们可以完全无缝地读取其他应用的数据,并且代码非常简单明了,并没有增加应用间的耦合性。

只读数据库适应于业务逻辑比较简单的数据读取,如果数据需要预先进行复杂的操作,就无法简单地通过只读数据库取得数据。另一方面,应用间有时候确实需要进行一些写操作,这时候就需要借助于其他手段了。

Web Service

示例程序中,用户在purchase成功购买课程后,需要在learning这个应用中激活课程。这个过程可以通过Web Service来实现,由learning提供service接口,purchase调用这个接口并传递必要的参数。

Rails程序一般通过ActiveResource来简化service的开发,learning中提供服务的Controller代码示例如下:

# learning: app/controllers/roadmap_services_Controller.rb 
def create 
 Roadmap.generate(params[:roadmap_service]) 
end 

purchase通过RoadmapService来调用learning的service接口。

# purchase: app/models/roadmap_service.rb 
class RoadmapService < ActiveResource::Base 
 self.site = :learning 
end 
 
RoadmapService.create(params) 

我们对ActiveResource::Base类的site=方法进行了扩展,这样只需要指定提供service的应用名称(learning)就可以找到service的url。实现的原理仍然是通过向core发送请求,查询应用的url。

DRY

以上介绍了如何保持用户体验的一致性以及应用间如何交互,我们可以看到这些功能的实现方法与应用的业务逻辑并不相关,属于“框架支持代码”,所以为了避免代码重复并且进一步简化开发,我们把这些方法封装到gem里面,这样每个Rails应用只需要引用这个gem,就可以无缝地集成到框架中来,并且可以使用gem里面包装好的一系列方法。

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

Tags:Rails 重构

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