C# 班级有太多的责任,但我可以';I don’我想不出其他的设计方法
我有一个方法可以在UI中记录我想要的东西C# 班级有太多的责任,但我可以';I don’我想不出其他的设计方法,c#,solid-principles,C#,Solid Principles,我有一个方法可以在UI中记录我想要的东西 class Log { public static void Add(object text, bool isThread = false, int threadId = 0) { Console.WriteLine("[THREAD # " + threadId + "] " + text.ToString()); } } 以及使用该方法的WorkerThread类本身 class Worke
class Log
{
public static void Add(object text, bool isThread = false, int threadId = 0)
{
Console.WriteLine("[THREAD # " + threadId + "] " + text.ToString());
}
}
以及使用该方法的WorkerThread类本身
class WorkerThread
{
private int threadId;
public WorkerThread(int _threadId)
{
threadId = _threadId;
}
private void InitializeBrowser()
{
// code that initializes the browser
}
private void GoToAmazonHome()
{
Log.Add("Going to amazon home", true, threadId);
// code that goes to amazon home
}
private void SearchKeywordOnAmazon(string keyword)
{
Log.Add("Searching amazon for keyword " + keyword, true, threadId);
// code that searches amazon for a keyword
}
private List<string> ScrapeTopUrls()
{
Log.Add("Scraping top urls", true, threadId);
// code that scrapes top urls
}
private void Start()
{
InitializeBrowser();
GoToAmazonHome();
ScrapeTopUrls("pogo");
}
}
类WorkerThread
{
私有int-threadId;
公共WorkerThread(int\u threadId)
{
threadId=_threadId;
}
私有void初始值设定项browser()
{
//初始化浏览器的代码
}
私有void GoToAmazonHome()
{
Log.Add(“去亚马逊主页”,true,threadId);
//去亚马逊主页的代码
}
private void SearchKeywordOnAmazon(字符串关键字)
{
添加(“在亚马逊搜索关键字”+关键字,true,threadId);
//在amazon中搜索关键字的代码
}
私有列表URL()
{
添加(“抓取顶级URL”,true,threadId);
//刮取顶级URL的代码
}
私有void Start()
{
InitializeBrowser();
GoToAmazonHome();
(b)删除URL(“pogo”);
}
}
所以,我想做的是创建单独的类,负责在amazon中导航并获取最佳结果
我不知道如何才能做到这一点,而不会让人感到困惑,比如必须在这些函数中传入threadId,以便它们也可以调用Log.Add,使用该threadId。如果只需要记录线程id,则不必将其作为参数传递
您可以使用一个静态属性
System.Threading.Thread.CurrentThread.ManagedThreadId
。它将返回当前线程的Id我认为WorkerThread
上的每个方法都像某种操作。通过WorkerThread
将分派到相应的操作,您可能能够将这些任务重构为实际的ApplicationAction
类。创建只负责执行任务的类(即TopUrlScraper、AmazonKeywordSearch等)。将它们抽象到接口,并通过构造函数注入依赖项。然后在方法内部调用注入的类。这样,您的逻辑就被分离了,这个类的责任是调用不同的类,并将threadId传递给loggerDon不要因为您在某个地方读到某个不好的想法而重新设计代码。重新设计代码,因为您在编写或维护代码时遇到了可识别的问题。如果遇到这个问题,你会说“哦,现在我明白了那篇可靠的敏捷烧烤文章的意思了”,那就是你担心敏捷烧烤原则或其他问题的时候了。这些东西应该为理解编程中遇到的实际问题提供一个框架。“单一责任”是胡言乱语,直到你有足够的经验理解他们的意思。