簡體   English   中英

為第三方實現者指定接口

[英]Specifying interface for third-party implementors

我有一個需要某些功能的項目,我為這些功能創建了一個接口。 如果接口的實現要由外部方執行,那么正確的方法應該是什么?

我的想法是創建一個類庫項目( MyInterface ),在這個項目中定義我的接口( IModule ),編譯它並將 DLL( MyInterface.dll )提供給外部各方。 外部各方將使用 DLL 作為參考進行開發/實現,然后給我他們的最終 DLL。 我的主要項目將引用MyInterface項目以及所有實現。 在我的代碼中,我會做這樣的事情:

IModule module = new ImplementationA();
module.DoSomething();
module = new ImplementationB(); // Change implementation at runtime

這種方法是否正確? 有更好的選擇嗎?

附帶問題:這是策略設計模式嗎? 還是門面?

我可能會使用配置在運行時加載第 3 方程序集,查找單個工廠類型,創建一個單例實例,並通過工廠創建每個實現類。 通過這種方式,您可以將所有程序集交給第 3 方,他們可以隨時構建和更新其組件。 他們依賴於你的代碼,但你不依賴於他們的。

我不太了解你的項目或情況,但我會考慮發布你的界面的 nuget 包並允許第三方安裝它。 當您需要對界面進行更改時,這為您提供了版本控制的強大功能。 您將更改發布為新版本,然后他們可以相應地更新他們安裝的 dll 包。 這至少為他們提供了一種具體的方式,以可控的、穩健的方式針對您的需求進行開發。

如果您不熟悉 nuget 包,在 Visual Studio 中,您可以右鍵單擊解決方案中包含 dll 的必要項目,然后選擇Pack 您還可以通過轉到項目屬性中的Package選項卡來更改包設置(項目上的相同上下文菜單,選擇Properties )。

您還可以通過命令行執行dotnet pack ,該命令行具有許多可以利用的命令行參數。

無論您采用哪種方式,您都可以將 nuget 包發布到 nuget.org、其他帶有工件提要的服務,或者只是發布到磁盤上的文件。

有用的 Nuget 包參考:

至於您關於模式的問題,通常當您在運行時切換這樣的實現時,這就是工作中的策略模式 外觀是當您使用單個類來抽象出不同子系統類的多個實例時。 例如,假設您有GetUserUpdateUserDeleteUser操作類。 您的外觀可以是一個名為UserManager類,並且在該類中您將公開每個用戶操作的函數。 在這些函數中,您將訪問每個操作類的每個單獨實例,並在內部將調用傳遞給這些函數。 在這個例子中,在門面內,你知道你正在使用 3 個類。 從它外部的代碼/調用者的角度來看,他們只知道單個UserManager類。

暫無
暫無

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

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