普通跨端 VS Chameleon

正常业务代码重复实现

  1. // 普通业务代码web
  2. if (业务逻辑判断A) {
  3. 业务操作();
  4. }
  5. else if (业务逻辑判断B) {
  6. 业务操作();
  7. }
  8. // 普通业务代码小程序
  9. if (业务逻辑判断A) {
  10. 业务操作();
  11. }
  12. else if (业务逻辑判断B) {
  13. 业务操作();
  14. }
  15. // 普通业务代码Objective-c
  16. if (业务逻辑判断A) {
  17. [XXX业务操作];
  18. }
  19. else if(业务逻辑判断B){
  20. [XXX业务操作];
  21. }

一套代码运行多端合并

哇好牛逼,一套代码多端实现,开发效率显著提升

  1. // 普通跨端框架,实现一套代码运行多端
  2. if (业务逻辑判断A) {
  3. 业务操作();
  4. }
  5. else if(业务逻辑判断B) {
  6. 业务操作();
  7. }

理想很美好,现实很骨感

遇到了产品差异化实现:“我希望web端下载APP,小程序不用下载”

  1. // 普通跨端框架,实现一套代码运行多端
  2. if (业务逻辑判断A) {
  3. 业务操作();
  4. if (ENV.小程序) {
  5. 业务差异操作();
  6. }
  7. else if (ENV.web) {
  8. 业务差异操作();
  9. }
  10. else if (ENV.端) {
  11. 业务差异操作();
  12. }
  13. }
  14. else if (业务逻辑判断B) {
  15. 业务操作();
  16. if(小程序) {
  17. 业务差异操作();
  18. }
  19. else if (web) {
  20. 业务差异操作();
  21. }
  22. else if (端) {
  23. 业务差异操作();
  24. }
  25. }

这就尴尬了,如果你觉得以上不复杂,假设有4、5个端呢,业务逻辑掺杂跨端逻辑,产品逻辑别打断,可读性差,需求变更,牵一发动全身,每个端都要测试,跨端代码效率变得适得其反。

Chameleon

Chameleon 将特有代码充分隔离,保证正常产品逻辑整体具有连续性,保障各端产品差异化模块的独立性、一致性、可读。差异化产品修改不会影响其他端,各端底层接口调用不会影响其他端。

  1. // Chameleon跨端设计遇到产品差异化的代码
  2. if (业务逻辑判断A) {
  3. 业务操作();
  4. interface_foo(); // 产品多态接口
  5. }
  6. else if (业务逻辑判断B) {
  7. 业务操作();
  8. interface_foo2(); // 产品多态接口
  9. }