簡體   English   中英

為通過名稱標識的對象創建類是一個好主意嗎?

[英]Is it a good idea to create a class for object identified by names?

我有一個可以通過名稱標識的服務列表。 每個服務都有一組參數(IP地址,端口,可用性等)。 還有一些方法可以應用於服務(關閉連接,打開連接,向服務器發送消息,檢查其是否響應等)。

因此,我認為創建Server類並將真實的服務器表示為此類的對象是一種自然的方法。

但比我意識到這並不是很方便。 例如,我有一個服務器名稱(只是一個字符串),我想對該服務器做些事情。 然后,我需要一個將服務器名稱映射到代表該服務器的對象的映射? 這似乎不是一個優雅的解決方案。

我決定要創建一個包含一組靜態方法的類。 然后,例如以以下方式使用它: ServerClass.sendMessage("NameOfServer","MyMessage")或例如ServerClass.close("NameOfServer")ServerClass.getIP("NameOfServer")

這是一個好的解決方案嗎?

具有各種實例的類的一個優點是它提供了一種類型安全性。 如果你有

Server myServer = ServerRepository.getServer("NameOfServer");
if (myServer != null) myServer.sendMessage("MyMessage");

那么您就可以在發送消息之前知道服務器名稱中是否有錯字(因為存儲庫無法返回匹配的消息)。

是您的所有服務器都公開相同的服務,還是有一些依賴於服務器? 例如,如果您同時擁有具有doFoo()方法的FooServer和具有doBar()方法的BarServers,但Foo沒有doBar且Bar沒有doFoo,那么這可能是一個壞主意,因為ServerClass可能會公開對潛在的來電者毫無意義。 但是,如果您知道所有服務器都將是FooServer,那么這可能是一種有效的方法,因為您可以集中通用代碼。 我要說的是要小心,您的代碼保持可維護性,並且不會在需要自定義代碼的情況下強制執行常見的行為,否則最終會添加大量額外的參數來指示“特殊情況”,在這種情況下,您的行為需要針對一個原因或另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM