老韩头的开发日常【好书学习】系列

背景

作为丙方,完成了甲方的二开需求。因此,在设计二开模块的时候,考虑的是当时所列的需求清单,并整合到一个二开模块中。完成交付后,客户评价蛮好的。因此,成功的为乙方争取到了继续合作的机会。然后,就没我啥事了,尴尬...

再之后过了一两个月,另一个丙方搞不定甲方的需求,所以我又被安排上线收拾残局。而,此处接手的残局有点坑,涉及多个开发的二开模块。由于甲方的需求是分批提出,且由多个团队完成。因此,二开模块的间存在循环依赖的情况。在已经跑起来的库上运行,没有任何问题,但是,在新库上重新安装的时候,会发现根本安装不上。因此,决定花一个月的时间彻底拆分已有的二开模块。

为什么拆

问:一般情况下,odoo上线后基本上不会出现在新库上重新部署的情况,为什么还要费劲去拆分二开模块呢?

答:最核心的原因是,这可能是一个需要长期维护的项目。

问:长期维护的项目和单次分包的区别是什么?

答:长期维护的项目,虽然在前期可能会付出更多的时间,但是可便于后期的项目管理,即便是最极端的情况发生,也可以以较快的速度恢复生产;而单次分包的项目,一般只是为了去完成一份需求清单,而且即使设计了二开的原因,也很少会有单次分包人员会遵守,因为工作量会增加。

怎么拆

  1. 针对基础模块的功能扩展:比如库存、销售、采购等,此类二开模块需仅包含针对该单一模块的功能扩展,且不能引用非odoo原生的模块;
  2. 针对多基础模块的功能扩展:比如针对销售的业务中扩展对调拨的业务处理逻辑,此类二开模块应仅包含odoo原生的基础模块和1中二开模块;
  3. 针对独立业务场景的功能扩展:比如图书馆有借书还书的需求,就需要单独根据业务场景扩展功能模块。

    以上三项是否拆分的合理的一个主要的标识是,1、2、3中的任意模块均可独立安装(2、3中在__manifest__.py中添加所需依赖)

    本项目的拆分效果如下:

    各二开模块建议是甲方公司的简称,便于标识。

结论

由于业务是不断变化和发展的,为了让系统真正成为助力业务发展的工具,势必会接触到odoo的二开市场。因此,不管是甲方还是可以长期维护的乙方,都建议在二开之初,可以参考上面提到的“怎么拆”章节。当然,如果是单次分包,那就随意吧。

【odoo】关于odoo二开模块规范的一点思考的更多相关文章

  1. odoo导入功能二开

    原来有的导入功能相信很多小伙伴对其功能不是很满意,不过没关系,我们可以二开啊,把它的功能改造成你想要的样子,接下来让我们看看怎么办吧 例如我想把员工导入功能中添加上用户同步注册功能 首先,我要找到原模 ...

  2. 还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠

    相比于从零开始构建全套信息化系统,基于成熟的ERP等行业软件做二次开发是更多中大型企业应对个性化软件需求的首选方案.如何在二开模块中,可靠地对成品软件的数据库进行读写操作,以满足单据自动创建.元数据自 ...

  3. Odoo:全球第一免费开源ERP库龄表的简单实现方法(无需二开)

    问题背景 希望查看库龄超过30天的货物,该如何实现?此种简单数据查询需要二开吗? 解决方案 方法一:Stock Quant列表视图增加过滤器 <filter string="库龄超30 ...

  4. 浅析JS中的模块规范(CommonJS,AMD,CMD)////////////////////////zzzzzz

    浅析JS中的模块规范(CommonJS,AMD,CMD)   如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已.     ...

  5. JS中的模块规范(CommonJS,AMD,CMD)

    JS中的模块规范(CommonJS,AMD,CMD) 如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧, ...

  6. 理解JS中的模块规范(CommonJS,AMD,CMD)

    随着互联网的飞速发展,前端开发越来越复杂.本文将从实际项目中遇到的问题出发,讲述模块化能解决哪些问题,以及如何使用 Sea.js 进行前端的模块化开发. 恼人的命名冲突 我们从一个简单的习惯出发.我做 ...

  7. NC57,NC63-NC二开经验总结

    版主2010级市场营销专业本科生 2013年8月入达内培训Java相关技术 12月入职,做用友NC的二次开发工作 2015年4月离职,4中下旬入职一家互联网金融企业 下面是做NC二开期间积累的一些常用 ...

  8. JS模块规范 前端模块管理器

    一:JS模块规范(为了将js文件像java类一样被import和使用而定义为模块, 组织js文件,实现良好的文件层次结构.调用结构) A:CommonJS就是为JS的表现来制定规范,因为js没有模块的 ...

  9. Javascript模块规范(CommonJS规范&&AMD规范)

    Javascript模块化编程(AMD&CommonJS) 前端模块化开发的价值:https://github.com/seajs/seajs/issues/547 模块的写法 查看 AMD规 ...

随机推荐

  1. 商业爬虫学习笔记day7-------解析方法之bs4

    一.Beautiful Soup 1.简介 Beautiful Soup 是python的一个库,最主要的功能是从网页抓取数据.其特点如下(这三个特点正是bs强大的原因,来自官方手册) a. Beau ...

  2. vmware使用nat连接配置

    一.首先查看自己的虚拟机服务有没有开启,选择电脑里面的服务查看: 1.计算机点击右键选择管理  2.进入管理选择VM开头的服务如果没有开启的话就右键开启  二.虚拟机服务开启后就查看本地网络虚拟机的网 ...

  3. Linux:-e、-d、-f、-L、-r、-w、-x、-s、-h、

    -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L fil ...

  4. pandas基础学习一

    生成对象 用值列表生成 Series 时,Pandas 默认自动生成整数索引: In [3]: s = pd.Series([1, 3, 5, np.nan, 6, 8]) In [4]: s Out ...

  5. 为什么volatile能保证有序性不能保证原子性

    对于内存模型的三大特性:有序性.原子性.可见性. 大家都知道volatile能保证可见性和有序性但是不能保证原子性,但是为什么呢? 一.原子性.有序性.可见性 1.原子性: (1)原子的意思代表着-- ...

  6. 关于为了一时方便,使用@Scheduled注解定时踩的坑

    摘要: 事情是这样的前两周在做项目的时候碰到一个需求---要求每天晚上执行一个任务,公司统一使用的是 xxl-job 写定时任务的,我当时为了方便自己,然后就简单的使用了Spring的那个@Sched ...

  7. numpy基础教程--clip函数的使用

    在numpy中,clip函数的原型为clip(self, min=None, max=None, out=None),意思是把小于min的数全部置换为min,大于max的数全部置换为max,在[min ...

  8. Moment.js使用笔记

    零.前情提要 上个月开发了数据平台,用的框架是vue + Ant Design of Vue,其中用了组件[range-picker]日期选择框,涉及到时间方法就去看了momentJS,以此记录~ 如 ...

  9. 如何为Dash/Zeal生成c++ 文档: 以abseil文档为例

    目录 1. 软件安装 2 Sample源文件下载: 3. 生成步骤 3.1 使用doxygen生成html文件 3.2 使用docsetutil 生成 dash/Zeal 格式 1. 软件安装: 1. ...

  10. 新一代Java程序员必学的Docker容器化技术基础篇

    Docker概述 **本人博客网站 **IT小神 www.itxiaoshen.com Docker文档官网 Docker是一个用于开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与 ...