最近公司一个项目,需要将新网站接入美国总部的 ERP 系统,同时对流程做一部分的扩展。在这之中碰到的最大的问题,就是没有旧系统的设计并不符合 ERP 的需求,而因为要保证整个过程的无缝链接以及敏感数据的安全,对于数据库的改动限制非常大。
同事 Daniel 负责这次的更新,我们对这个问题也讨论过好多次,在 Rails 如何实现这样的功能呢。最后选出了一种不破坏旧系统的结构,也不需要数据导入的方式。只在需要进行 ERP 扩展的对象上增加相应的字段,然后使用 Order 对象的子类 ERPOrder 进行封装,将这个类传递到 ERP 系统代替原来的 order 对象。这样下来,几乎整个 ERP 的交互过程不需要做太大的改动,流程控制也变得简单且清晰,状态判断以及异常处理也变得非常合理,代码精简不少。
对 ERPOrder 类的编码中,深刻体会到 Ruby 语言的动态性带来的便利。为了避免这次的情况,能为以后更新版本的系统提供兼容,我们将很多业务逻辑抽取出来,作为 module mix in 到 erp 对象中。以后即使系统再次升级,也不用担心是否会影响到 order 对象本身的业务逻辑以及数据验证。
不过对于 Ruby 中的 module,mixin,include 机制还不是了解得很透彻,以后要多学习了
分享到:
相关推荐
userstamp, 这个 Rails 插件扩展ActiveRecord Userstamp插件( v-2.0 )概述Userstamp插件扩展了 ActiveRecord::Base,以添加对'创建者','更新程序'和'deleter'属性的自动更新。 它是基于 ActiveRecord::Timesta
Barista 可以简单透明的方式让你的 Rails 3 应用支持 CoffeeScript 脚本。 标签:Rails
Paperclip 是 Rails 框架的一个插件,用于扩展 ActiveRecord 以支持简单的文件附件的功能。 标签:Paperclip
Trailblazer 是基于 Rails 的一个瘦的封装层,加强了代码的封装使用,更直观的代码结构和面向对象架构。是一种概念驱动的架构模型,项目目录如下: app├── concepts│ ├── comment│ │ ├── cell.rb│ ...
RuboCop滑轨 扩展专注于实施Rails最佳实践和编码约定。 注意:此存储库管理rubocop-rails gem(> = 2.0.0...您需要告诉RuboCop加载Rails扩展。 有三种方法可以做到这一点: RuboCop配置文件 将此放入您的.rubocop.yml
Ruby On Rails是一个用于编写网络应用程序的软件包.它基于一种计算机软件语言Ruby,给程序开发人员提供了强大的框架支持.本书介绍了rails的基本使用,深入扩展,练习挺多的
扩展专注于执行 Rails 最佳实践和编码约定。 注意:此存储库管理 rubocop-rails gem (>= 2.0.0)。 rubocop-rails gem (<= 1.5.0) 已重命名为 gem。 安装 只需安装rubocop-rails gem gem install rubocop-rails...
routing-filter 包裹了 Rails 路由系统的复杂野兽,在 Rails URL 识别和生成中提供了看不见的灵活性和强大功能 路由过滤器围绕着复杂的野兽,Rails 路由系统在 Rails URL 识别和生成中提供了看不见的灵活性和强大...
本书从Ruby和Rails的历史讲起,以在Rails框架上克隆故事共享网站digg.com为例,详细讲述了Ruby和Rails的安装过程、框架组成部分、与AJAX和Web 2.0技术结合、安全措施、高级话题和扩展功能等。本书带领读者运用最新...
如果您在从Chrome Store安装扩展程序时遇到问题,或者只是想运行最新版本并对其进行破解,则只需克隆存储库(例如~/workspace/rails_panel ),然后在“开发人员模式”的Chrome扩展程序页面中选择“加载解压缩的扩展...
分发阅读将数据库读取扩展为Rails中的副本 :tangerine: 经过战斗测试安装将此行添加到您的应用程序的Gemfile中: gem 'distribute_reads'如何使用大部分工作。 首先,更新database.yml以使用它: default : &default...
bootstrap-table-rails提供插件作为Rails引擎在资产管道中使用它。 安装 将此添加到您的Gemfile中: gem "bootstrap-table-rails" 并运行bundle install 。 用法 在application.js ,包括以下内容: //= ...
Audited是一个ORM扩展记录了Rails模型的所有变化
产品特点灵活的模板将内容与标记分开丰富的RESTful API 直观的管理界面和实时预览多语言和多领域SEO友好网址用户访问控制建立联络表单邮件附件和下载动态图像裁剪和调整大小可通过Rails引擎扩展集成到现有的Rails...
GO Rails模板在Ruby On Rails中构建大型Web应用程序的模板。 通过应用以下模式来关注扩展,性能和最佳实践:服务对象,表单对象,查询对象,计算对象,值对象,策略对象,装饰器等。 由与 :red_heart:一般信息Ruby...
GO Rails模板在Ruby On Rails中构建大型Web应用程序的模板。 通过应用以下模式来关注扩展,性能和最佳实践:服务对象,表单对象,查询对象,计算对象,值对象,策略对象,装饰器等。 由与 :red_heart:一般信息Ruby...
Prawn :: Prawn :: Rails提供了一种使用对虾库在Rails 3中创建PDF视图的简单方法。 要使用Prawn :: Rails,只需添加以下行gem 'prawn_rails'到您的Gemfile,然后运行bundle install而已! 您现在可以创建名为[ ...
可实现多文件的同时上传,控制文件的格式,数量,同时兼容IE6,7,firefox,易于扩展
适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...