Fw: [問題] 改code改到累了 耦合模式

作者: s4300026 (s4300026)   2019-05-20 11:21:43
※ [本文轉錄自 C_Sharp 看板 #1SuXiP0z ]
作者: s4300026 (s4300026) 看板: C_Sharp
標題: [問題] 改code改到累了 耦合模式
時間: Mon May 20 11:12:23 2019
是這樣的
最近小弟改code改到累了,
改到非常想翻桌
想跟各位大神討論該怎麼做 Obsolete 程式碼的編程
我的實際應用狀況是這樣的:(我舉兩個例子都是相同問題)
===================================
情境1. WriteTraceLog
在原本一開始的時候我根本不會去寫所謂的Log File
只要編譯可以過就行了
直到某一天我的程式出問題
我問使用者出了什麼問題?
他說:"就是點點點後就當機了"
能敘述詳細一點嗎?
他說:"就是如下操作..."
然後實際操作正常...
我:......
從此我學會了WriteLog的重要性
在這個時候的我
撰寫程式碼如下
WriteLog("進入OO方法");
WriteLog("做某事已成功");
WriteLog("退出某方法");
隨著事情的發展
我明白到Polling Event Callback方法根本不能這樣寫
因為會多一堆垃圾訊息
因此改寫成
WriteLog("EventCallback已呼叫", isDebugMode);
寫到這裡
我覺得自己很厲害
以後就可以不用靠使用者口耳相傳的方式除錯了
只要給我Log檔,剩下我自己想辦法重現
做到這邊
我就在想,如果我能適時的 "順便" 紀錄一些使用者覺得需要的訊息好像也不錯?
(以前他們是自己做完自己用紙筆紀錄的)
就在這個時候
我的解決方法是
一般的 WriteLog 是用 Static,
static string logPath;
static string logFile;
當要特別處理時我另開變數處理
string dynamicLogPath;
string dynamicLogFile;
這樣就可以各自處理需要的文件 (讚!)
相安無事一些時間後
我學到了multiThread
因為C#很注重委派方法
我開始在意writeLog是哪個執行序
因此我開始加入thread.CurrentThread, 並開始排版
writeLog("LogStr","NowClassName","NowMethodName");
然後到了最近
我又學到了
stackTrace(true).GetFrame(1).GetMethod().Name;
stackTrace(true).GetFrame(1).GetMethod().DeclareType.Name;
我就想把整個過去的方法整個改掉
不然一路走來的方法實在是太多種了,多到我我覺得我之後一定會忘記哪種是最新的版本
而且印出來的log排版格式完全不一樣,看了格外的痛苦.
因此想問寫程式有什麼好辦法?
=================================
情境2:ConnectMethod
我時常用程式去操控一硬體,
我要給予該硬體一個指定電壓電流的命令 (如LED燈泡,可以吃7V~12V的電壓)
在一開始的版本中
是採用 類比控制 (不連線)
我就只要直接輸出類比電壓就結案了
之後我操控的軟體升級了
改採用 RS232 去操控 (serialPort連線)
然後我就再寫了一個新的版本
又過了幾天
我開始擔心會不會又改了一個新版本
採用網路去控制 (Ethernet連線)
當我開始意識到這個問題時
我開始找解決方法
在 深入淺出 - 設計模式 中
他們的建議是盡量採用 Interface 做變數型別
盡量不要用 class 當變數型別
class SerialPortConnect{}
interface ConnectMethod{}
SerialPortConnect myRS232; (X)
ConnectMethod myConnectMethod; (O)
但問題是我已經很懶得再動以前的程式碼了
因為真的花很多時間處理通訊的問題
好不容易有個 "稍微" 穩定的版本
我想詢問版上的大大
會怎麼去處理這樣的問題呢?
我目前的想法是添加警告訊息
[Obsolete("請不要使用",false)]
public class MyClass{}
但我想知道大家會怎麼去設計
因為我真的改到不想改以前的程式碼了...
但我又覺得專案中有一堆過時的東西、各種風格令人煩躁...

Links booklink

Contact Us: admin [ a t ] ucptt.com