2017-12-03 1 views
1

私は現在、3種類のCRUDを含む大きなプロジェクトに取り組んでいます。 ICrudインターフェイスには、実装時に希望のデータ型を入れるための<t>が含まれています。インタフェースの競合Java

私の問題は、私が3番目のクラスでそれを実装したときに、メソッドの1つ(readAll)が4つの他のメソッド(CRUD)よりも別のデータ型を使用することです。これはどんな方法でも可能ですか?

私はreadAllメソッドを使用して、一致するデータ型を返しますが、使用されていないためnullを返します。代わりに正しいデータ型を返しますが、インターフェイスの一部ではないreadall2()メソッドを作成しました。

ICrudインタフェース:

public interface ICrud<T> { 

List<T> readAll(); 

List<T> read(int cvr); 

void create(T t); 

void delete(int cvr); 

void update(T t, int id); 
} 

私はそれを実装する方法:すべてのために

public List<Company> readAll() 

(ないドライバが、ドライバ:私はREADALLを使用する方法を

@Service 
public class AdminRepository implements Ilogin<Admin>, ICrud<Driver>, 
IAdmin<Company> 

インタフェース内の他のメソッド)

そして、私は追加したいです。私は会社を取るのでiAdminでreadAllを持っていましたが、ICrudを実装する他の6つのクラスでもこのreadallメソッドがあります。

ありがとうございました。 :)

+1

説明を明確にするために、インターフェース定義のサンプルを提供してください。 –

+0

実際、具体的な例がなければ、問題は何かが非常に不明です。 –

答えて

1

あなたは設計上の問題を持って、私はあなたが次のリンクには約SOLID原則読んでお勧めします。あなたがない場合は、正しい設計で

https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design

を、あなたは、すべてのインターフェイスを実装するべきではありませんそのメソッドの1つを実装します(あなたの場合はreadAllです)。これは懸念が混ざっていることを意味し、インターフェースはより小さなインターフェースに分割する必要があります。おそらくreadallを別のインターフェースに分割することで、あなたの問題が解決されます。たとえば、ICrudの代わりに、書き込み操作だけのインターフェイスと、読み取り操作のインターフェイスと、readAllのインターフェイスを作成します。

オブジェクトをretrunタイプ、ジェネリックまたはダイナミクスとして使用するなど、ICrudインターフェイスをそのまま維持して、問題を解決する方法はたくさんあります。しかし、根本からあなたの問題を解決するのは、私が上に述べたような良いデザインに従っていることです。

+0

はい、意味があります、私たちはまだ学校のデザインパターンについて学んでおり、ここにそれを適用するのはいい考えです。カットコーナーをスキップしたいと思っていますが、私が実装するクラスでは可能でしょうか?簡単に言えば、ICrud と指定して、さらにメソッドを指定しますか? – ITGuru

+1

いいえ、回答したときにコードの追加が表示されませんでしたが、引き続きアドバイスが適用されます。ジェネリックの使用はオブジェクトを使用するよりも優れています。しかし、まだ私のアドバイスは、IReadAll などの別のインターフェイスに使用すると、2つのインターフェイスのIWriteCruds 、あなたがIWriteCruds とIReadAll を置き換えることができ、それらを実装IReadAll を持つことができ、このようにREADALLを分離することです。 – RaniDevpr

+0

それは良い点です、私はそれを行います。将来、これは非常に多くのインターフェースをもたらしますが、どのようにそれらを追跡していますか?それらをフォルダで並べ替えますか? – ITGuru