New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

简化"添加新算法"的流程 #1

Closed
pezy opened this Issue Aug 8, 2017 · 0 comments

Comments

Projects
None yet
1 participant
@pezy
Copy link
Owner

pezy commented Aug 8, 2017

这个应用最直接的需求就是: 试验 OpenCV 的算法. 那么最该首要关注的是: 遇到一个新算法, 想加到这个应用上的步骤.

下面简要总结下目前的过程:

  1. 新建一个 class, 继承 AbstractConvert 类.
  2. 如果有参数配置, 则重写 initParamsWidget() 方法. 创建参数配置的 UI.
  3. 重写 applyTo 方法. 将算法逻辑写在里面.
  4. 增加一个枚举量, 唯一标识此算法.
  5. 在主页面的 createImageActions 里添加一条 createImageAction. 绑定枚举与菜单项名称.
  6. 在 action 对应的 slot 函数中增加工厂逻辑: 在 switch 语句中增加一条 case.

其中 1 ~ 3 比较正常, 完成一个新算法必不可少的两项: 配置参数与算法逻辑.

然而 4, 5, 6 在代码中会显得非常冗长. 每增加一项算法, 因为这三条的原因, 代码长度会增加 3 倍. 如果遇到后期要维护修改, 譬如更改枚举变量名称, 则需要对应着改三处.

由于后期的修改点, 几乎集中在这个流程中. 所以缩减 4 ~ 6 的步骤很有必要. 但无论如何, 创建对象少不了, 增加菜单少不了. 这两者的绑定也少不了.

除此之外, 其实还有一个隐藏的效率要求: 创建对象的过程应该是"动态"的, 即, 只有在点击菜单项的那一刻, 才创建.

最后, 还有一个新需求需要考虑: 不仅需要菜单项, 还需要相对应的工具栏上的工具按钮, 所以还需要多指定一个 icon 名称.

@pezy pezy closed this in 35a3cdf Aug 8, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment