Re: [問題] 在流程中插入檢查或不檢查 程式怎麼寫

作者: wulouise (在線上!=在電腦前)   2023-11-05 01:08:37
※ 引述《saladim (殺拉頂)》之銘言:
: 有遇到一個程式流程中 某些步驟可能要檢查或不檢查的問題 想請問該
: 怎麼寫比較好. 語言是使用C++
: 首先我有一個computing class, 裡面有個member function,
: 專門負責做計算的動作 而裡面有七個步驟:
: class Engine::compute(...arguments...)
: 1. compute1
: 2. compute2
: 3. if checking fails this return pre-condition is not satisfied
: 4. compute3
: 5. foreach cofig in allowed_user_configurations
: 6 if checking succeed then store this configuration
: 7. return allowed_configuration
: 步驟3)跟步驟6)的檢查是由一個complianceChecker的class來做的:
: bool compliance.check(....arguments....)
: 現在呢 為了一些原因 提供了一個選項 可以讓步驟3.)跟步驟6.)的檢查不做-也就是
: 永遠檢查成功, 請問要怎麼在不動到主流程的狀況下, 來達成這件事情呢?
已經抽出function的前提下,在這個情況下基本上不用做太多
只要complince裡面member variable可以指定check skip #3, #6 就差不多了
#3 / #6裡面只要early retirm讓你跳過check就好
Eg:
```
class Compliance{
public:
bool checkNo3(args...){
if(m_skipNo3) return true;
// old logics...
// ...
}
private:
bool m_skipNo3{false};
}
```
以上滿足主流程不變 (除非主流程不是#1~#7而是指#3 & #6的各自function)
更進階就是寫多個module然後做callback chain,但看起來你的情境並不需要
擔心忘記寫有點很奇怪,因為他應該是business logic spec的一部分
真的要更generic的作法,只有一類context適合
就是寫script/low code平台讓user自己搞定business logic
但是做之前要注意,這類平台不用open source或是有足夠客戶使用,下場不會很好...
幾個前提
1. user很懂business logic但是不太熟程式
2. 在binary不改變的情況下切換行為,但是又不想hard code邏輯或每次需求都要改
3. 這些business logic沒人在做unit test或沒有要求
4. 這些邏輯不會經常修改,而且沒有refactor的必要
5. 壞了不會叫你修 (***最重要***)
#1 or #2 + #3~#5的情況 可以考慮弄
如果以上都沒有,真的不用考慮太多
因為business logic弄得太generic,不一定有人能幫你debug
至少if else大家都看得懂
真的想要沒有backup或是讓公司不能沒有你的話可以考慮XD
自己看過幾個,一個WPF插custom script,接近純UI所以還堪用,只是要自己生viewer
另一個就真的用script當底甚麼都能寫,然後script除了作者幾乎都沒人能維護XDDD

Links booklink

Contact Us: admin [ a t ] ucptt.com