[问题] 改code改到累了 耦合模式

楼主: s4300026 (s4300026)   2019-05-20 11:12:23
是这样的
最近小弟改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{}
但我想知道大家会怎么去设计
因为我真的改到不想改以前的程式码了...
但我又觉得专案中有一堆过时的东西、各种风格令人烦躁...
作者: totte (totte)   2019-05-20 12:33:00
建议找一下董大伟 AOP
作者: ssccg (23)   2019-05-20 12:36:00
log通常都用现成的library
作者: Litfal (Litfal)   2019-05-20 16:12:00
log去参考别人的lib和用法,虽然自己做轮子也蛮有趣的往坏处看,你经验不足,设计离到位差太远。往好处看得话,就是你一直在进步啊。
楼主: s4300026 (s4300026)   2019-05-20 16:27:00
现在做轮子做到想摔工具了
作者: YahooTaiwan (超可爱南西我老婆)   2019-05-20 19:30:00
怎么不用 NLog?
作者: neo5277 (I am an agent of chaos)   2019-05-20 19:38:00
AOP做法+1累一次就好
作者: Litfal (Litfal)   2019-05-21 01:27:00
问题2: 有Visual Studio这个地表最强IDE,重构超简单你只要撷取接口+rename methods,最后再把接口改成同一个
作者: ssccg (23)   2019-05-21 09:16:00
如3楼说的,即使自己做也可以参考一下别人的设计
楼主: s4300026 (s4300026)   2019-05-21 10:02:00
好的,说也是,不应该什么都自己想
作者: jass970991 (半糖绿假面超人)   2019-05-21 19:01:00
Log4net
作者: M9665566 (仑)   2019-06-09 13:36:00
套用现成工具很重要,不能一直闭门造车 : )
作者: Tony427 (重新出发...fight!!)   2019-08-09 02:26:00
NLog...另外一堆code都开源了...缺功能自己写送PR,外部元件不是全用全不用,而是要有能力判断哪个适合解决问题,另外有没有人持续维护

Links booklink

Contact Us: admin [ a t ] ucptt.com