![](/img/trans.png)
[英]How to separate interface from technical implementation using Interfaces when there are Exceptions
[英]Separate decode/encode interfaces or in one interface
我正在創建一個執行從一種形式到另一種形式的轉換。
我現在面臨的設計問題是編碼器和解碼器API是應該在一個接口中還是在單獨的接口中。 例如,Apache MINA使用單獨的接口
我目前正在做這樣的事情:
interface Convertor
{
A encode( B b );
B decode( A a );
}
將它們放在一個界面中的基本原理是,您可以集中實現並在一個地方修復任何協議更改。 有什么想法嗎?
具有單獨的接口並不意味着您無法集中實現。 例如,您可以讓一個類實現兩個接口。 或者每個類可以引用實現協議的公共類。
所以我要做的就是擁有單獨的接口,至少從一開始就有兩個類實現。 因此實現是共享的,但是用戶代碼將編碼器和解碼器視為獨立且獨立的概念。
唯一的事情是你通常有一個代碼部分將使用解碼器和一個單獨使用編碼器。 因此,對接口的編碼部分的改變將迫使不必要地重新編譯解碼部分,反之亦然。
對於帶有頭文件include的c / c ++等是真的。
搜索可靠原則並參見接口隔離原則。
好吧,你可以有兩個獨立的接口,然后是另一個組合它們的接口。 這樣可以更容易地為兩者聲明單個參數,例如
private IEncoder encoder;
private IDecoder decoder;
public ThingWhichUsesEncodeAndDecode(IEncoder encoder, IDecoder decoder)
{
this.encoder = encoder;
this.decoder = decoder;
}
public ThingWhichUsesEncodeAndDecode(IEncoderDecoder both)
{
this(both, both);
}
這實際上取決於你設想使用一個部分而不是另一個部分的頻率。 大多數時候我發現編碼/解碼的東西我需要兩個部分都可用,所以我可能只是用兩種方法聲明一個接口 - 但它確實取決於具體情況。
將它們放在同一個接口中的缺點是它會強制您的實現在單個類中同時是編碼器和解碼器。 這目前看似合理,但可能並非總是這樣。 所以我會問自己這是否應該是一個要求/是否可取?
將它們分開是更加靈活的。 如果您編寫單獨的接口,您始終可以將它們組合到您需要編碼和解碼功能時使用的第三個接口。
反之則不然。 如果從一開始就編寫一個接口,則會失去選擇僅包含編碼或解碼功能的靈活性。
通常你會一起使用它們,但有時候不會。 這取決於你更自然的東西。 順便說一句:如果你單獨定義它們,你仍然可以一起使用它們,例如
interface Converter extends Decoder, Encoder { }
考慮沒有單獨的編碼器/解碼器接口,而是考慮
interface Encodable
{
Decodable encode();
}
interface Decodable
{
Encodable decode();
}
class A implements Encodable;
class B implements Decodable;
取決於申請。
如果通常你有一個編碼器和一個解碼器在同一個二進制文件中,一個接口是好的。 如果它們通常是分開的(例如,僅捕獲應用程序編碼,管理應用程序僅解碼),則使用單獨的接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.