Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 班级有太多的责任,但我可以';I don’我想不出其他的设计方法_C#_Solid Principles - Fatal编程技术网

C# 班级有太多的责任,但我可以';I don’我想不出其他的设计方法

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

我有一个方法可以在UI中记录我想要的东西

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不要因为您在某个地方读到某个不好的想法而重新设计代码。重新设计代码,因为您在编写或维护代码时遇到了可识别的问题。如果遇到这个问题,你会说“哦,现在我明白了那篇可靠的敏捷烧烤文章的意思了”,那就是你担心敏捷烧烤原则或其他问题的时候了。这些东西应该为理解编程中遇到的实际问题提供一个框架。“单一责任”是胡言乱语,直到你有足够的经验理解他们的意思。