質問
getEmployeeNameByBatchId(int batchID)
getEmployeeNameBySSN(オブジェクトSSN)
getEmployeeNameByEmailId(String emailID)
getEmployeeNameBySalaryAccount(SalaryAccount salaryAccount)
または
getEmployeeName(int typeOfIdentifier,byte[]識別子)->この方法にtypeOfIdentifierれば識別子がbatchID/SSN/emailID/salaryAccount
つである、上記のより良い方法を実施する"get"メソッド?
これらの方法においてサーブレットと呼ばれらのAPIを提供いたします。
解決
なぜな過負荷にgetEmployeeName(??) 方法は?
getEmployeeName(int BatchID)
getEmployeeName(オブジェクトSSN)(bad)このメソッドをオーバーライド
getEmployeeName(Stringメール)
など。
るようになることは、良い"多くのアプローチです。
他のヒント
を使用できるようにする:
interface Employee{
public String getName();
int getBatchId();
}
interface Filter{
boolean matches(Employee e);
}
public Filter byName(final String name){
return new Filter(){
public boolean matches(Employee e) {
return e.getName().equals(name);
}
};
}
public Filter byBatchId(final int id){
return new Filter(){
public boolean matches(Employee e) {
return e.getBatchId() == id;
}
};
}
public Employee findEmployee(Filter sel){
List<Employee> allEmployees = null;
for (Employee e:allEmployees)
if (sel.matches(e))
return e;
return null;
}
public void usage(){
findEmployee(byName("Gustav"));
findEmployee(byBatchId(5));
}
う場合のフィルタリングによるSQLクエリを使うのに Filter
インターフェースを構成する場を提供しています。
のもこのアプローチができる場合が簡単:
public Filter and(final Filter f1,final Filter f2){
return new Filter(){
public boolean matches(Employee e) {
return f1.matches(e) && f2.matches(e);
}
};
}
使っている:
findEmployee(and(byName("Gustav"),byBatchId(5)));
いただくものと同様であ Criteria
API Hibernate.
いては、"多くの展開に注力してまいります。そうでより直感的かが発生することが少なくなりエラーとなります。
いgetXByY()-かもしれない涼しいPHPがんが生まれたJava(ymmv).
思ってオーバーロードしないかぎり、その性質が同datatype.その場合、思うようなものを第二のオプションで使用intも、今までの利用の列挙型のタイプの安全性と透明度そのbyteバッファがダイレクトバッファから使用オブジェクトが自動ボックス化は、この仕事もプリミティブ).
の方法の完璧な例での利用の過負荷.
getEmployeeName(int batchID)
getEmployeeName(Object SSN)
getEmployeeName(String emailID)
getEmployeeName(SalaryAccount salaryAccount)
場合において共通の処理内部での書きりgetEmplyeeNameImpl(...)を抽出、共通コードの重複を避け
最初のオプションは、質問です。きますでき、メンテナンス性と全くありませんである。
@ステファン:が難しい過負荷の場合はこのような形になります。(一般)このパラメータの種類のような差別は、例えば、
- getEmployeeNameByBatchId(int batchId)
- getEmployeeNameByRoomNumber(int roomNumber)
も参考にしてください方法getEmployeeNameBySSN,getEmployeeNameByEmailIdにします。
利用します明示的なメソッド名です。皆様を維持するとコードいたって以降かる方法ではなくxmlコメントです。
りすることができ、よりconveniantの利用 仕様のパターン.
例:GetEmployee(ISpecification<Employee> 仕様)
その後開始する仕様---
NameSpecification:ISpecification<Employee>
{
民間の文字列名
公NameSpecification(string name){ます。name=name;}
公bool IsSatisFiedBy(従業員の社員){return。名前==。名前}
}
NameSpecification spec=new NameSpecification(ティム-");
従業員のティム-=MyService.GetEmployee(仕様);
ところ最初のオプション、または過負荷でこの場合、見つけられます4つのパラメーターフェースの通称です。しかし、特定の助けを理解するコードから3ヶ月以ます。
は、ロジック内部のそれぞれの方法で大きくは同一者でもいいですか?
その場合、単一の方法と識別子のパラメータを取る。(シンプル低減を繰り返しコードとします。
場合のロジック/手続きの間で大きく異なっ種類の方法が種類が好ましい。
その他の人が最初のオプションのようにすることができます。第二といったような感覚だ書くコードですが、誰かがやって来て、いく姿をどのように利用コードです。(い、言いも掘り下げのコードがGetemployeeNameByIdで自己説明)
注意:ちなみに利用Enumsが何かを考える場合があります。
にな場合には、このようないく過負荷.るには:
getEmployeeName( int batchID );
getEmployeeName( Object SSN );
etc.
ない場合にのみにあるこの引数に指定し、メソッドの名前、すなわちの場合の型引数は判断が難しい場合には、いくつかの種類がありますの引数thaと同じデータ型(batchIdとemployeeId、int)である場合、又は方法を取得し、当社社員が根本的に異なっている各引数の型です。
見えないことに気づいたぜんまこ
getEmployeeName(int typeOfIdentifier, byte[] identifier)
が必要になるので両方の相手先との呼び出し側にキャストに基づく価額のtypeOfIdentifier.悪いデザイン。
場合に書き換えの問題で終わい:
"名前を選択しら---"
"選択SSNら---"
"選択メールから---"
対
"SELECT*から---"
としないといけないのではないか回答するのが簡単で、誰もが知っているからです。
何がどう変更した場合には、従業員のですか。E.g.:いのメールを追加フィルターのよう。の第二ソリューションで大きなリスクに気付かないエラーの場合あなただけの順序を変更int識別子"定数".の第一ソリューションによりお客さまは常に通知をご利用の場合の方法にか忘れられたすば忘れを修正は新たな識別子です。
個人的に好みの明示的なネーミング"...ByRoomNumberなってしまったときに多くの"過負荷"まず紹介を不要。て明示的には厚いる。
同意したステファン:一つのサブタスク、メソッド名, 場合でも行うことができるので複数の方法。方法の過負荷特集した同様。
- getEmployeeName(int BatchID)
- getEmployeeName(Stringメール)
- など。
や 回避 第二の溶液です。で匂い"thyオールドvoid*C".同様に、Java"オブジェクト"は、ほとんどがうまくいっていない、スタイルとしてのC"void*".
ていれば良いデザインが対応することができるでしょうかを判断するまでの過負荷アプローチまたはともいえる作に取り掛かる前にcssプロパティの問題が負荷がかかるというと二つの方法と同一のパラメータのタイプです。
オーバーロードのよう最良の方法は、当初、そのままで終われていないとすることができる方法が今後、相談のもと命名できたことで生活することができます。
個人的には今のためのアプローチのユニークな名前をた方法、すな問題、そのように過負荷が同じパラメータオブジェクト。また、誰かの拡張クラスは、将来、実施してもボイドgetEmployeeName(String name)名前ではなく、オーバーライドす。
を招聘し、独自のメソッド名の各メソッド、過積載できるだけ課題がありませんでした。
のデカップリングの検索過程の検索条件jrudolfを提案しその例に優れています。なぜかイマイチで最も票を投じます。んん?????
思っ クエリオブジェ.また、アクセスのテーブル。場合に限られる格納手続き、徐々に電力ができない機会です。
第一に、最も優れたJavaの考えではtypesafeとは違い、生成するための開発ツールです。また、通常のタイプには、第二ソリューションのようだけで面倒な利用に作業を行うことができます。ただし、お使いのオブジェクトの型としてSSN(ある意味意味を超えてオブジェクト)の、おそらくいるタイプのAPIとなります。
すべて、この特定の場合にはこの使用のアプローチと多くのsetterか.すべて識別して自分のクラスタイプかった第のルートが切り替え内部のクラスの代わりに提供-アプリケーションを定義型の識別子です。
棒全てのオプションの列挙型においては、次のようなもの
GetEmployeeName(Enum identifier)
{
switch (identifier)
case eBatchID:
{
// Do stuff
}
case eSSN:
{
}
case eEmailId:
{
}
case eSalary:
{
}
default:
{
// No match
return 0;
}
}
enum Identifier
{
eBatchID,
eSSN,
eEmailID,
eSalary
}
お考えているC/C++.
使用物体の識別子のバイト(またはint).
私の悪いと、過負荷アプローチによる使用のSSNとして、主キーはあまりよくありません
public ??? getEmployeeName(Object obj){
if (obj instanceof Integer){
...
} else if (obj instanceof String){
...
} else if .... // and so on
} else throw SomeMeaningFullRuntimeException()
return employeeName
}
かというより使用チェック例外シグナル伝達誤入力します。
文書では、お客様の認知が広がってい物いて評価する必要があります。または作成の包装.好きですから最初のオプションです。