2017-10-10 34 views
-3

この投稿は私が持っていた就職に関する質問ですが、ここでは解決方法を探しています。パラメータの値を変更せずにパラメータの値を変更する方法

インタビュアーは、私はPersonオブジェクトを受け取る方法を設計する方法をホワイトボードに書くために私に尋ねたので、私はこれを書い:

class Person 
{ 
    //Some properties 
} 

public void MyMethod(Person p) 
{ 
} 

その後、インタビュアーはメソッドがリストを受けなければならない私に言いました人のためのアドレス(配列)が、私はこのような変更:

class Person 
{ 
    //Some properties 
    private List<Address> adds; 
} 

class Address 
{ 
    //Some properties 
} 

public void MyMethod(Person p) 
{ 
} 

それから彼は私がこれをしなかったので、この方法は、アドレスを持つ人のリストもその人のためにボスのリストを受けなければならない私に言いました

class Parameter 
{ 
    private List<Person> pers; 
} 

class Person 
{ 
    //Some properties 
    private List<Address> adds; 
    private List<Boss> boss; 
} 

class Address 
{ 
    //Some properties 
} 

class Boss 
{ 
    //Some properties 
} 

public void MyMethod(Parameter p) 
{ 
} 

(彼はメソッドのシグネチャを変更してはならない私に言ったすべての変更で)インタビュアーは、単に「OK」と述べたが、私は彼が私のアプローチと非常に確信していたとは思いませんでした、私はありませんC#またはJavaのエキスパート(インタビュアーは彼がJavaをマスターしていると言っていました)、私はこの「簡単な」解決策を思いついたのでとても緊張していましたが、非常に悪い選択でした。

あなたはうーんOK、私はここで言及する重要なことは、また、エンティティの行動に異なる見解だと思うC#やJavaの

+0

は私がインタビュアーはあなたがボスは人を延長が期待思う);

は、これは、このトピックについての唯一の私の意見でありますアドレスのリスト。私はあなたがパラメーターで何をしようとしたか分かりません。 –

+1

メソッドのシグネチャを変更しないことが必要でしたか?あなたはそのタイトルにそれを書いたが、質問でそれを明確にしたことはなかった。 –

+0

IMHO 'Boss'は従業員のリストを持ち、' ​​Person'は上司のリストではありません。また、 'Boss'は通常' Person'です。したがって、 'Boss'クラスは' Person'クラスを拡張する必要があります。 –

答えて

0

を使用して最善の方法でこれを解決するために私を導くことができる場合、私は感謝します。

したがって、Addressクラス以上のものは、不変のDataTypeクラスである必要があります。 Personは1つ以上のアドレスオブジェクトを持つことができます。 私の質問はBossとPersonクラスに関連しています:あなたはN人を知っているボス、またはNボスオブジェクトを知っている人、あるいはその両方を1:NまたはN:Mの関係にしたいと思いますか?

人とボスを拡張するという問題に関する私のアドバイスは、これをしないでください。あなたは簡単なEntityクラスを持っていて、拡張は重いです。そのような振る舞いを使用したい場合は、例を挙げてください。 Bossはdelegateを持つperson属性を持っているか、Bossクラスのアドレスを再度定義することでデータ型を単純に再利用します。

パラメータが変更されていないので、少しばかげています。私はあなたの目的はパラメータクラスで得るが、それは良い方法ではない。したがって、メソッドがPersonオブジェクトのみを受け取る場合は、Person型を使用します。そうでない場合は、Collection型でメソッドをオーバーロードします。それはすでに持っている人を受け取り、あなたの方法は、アドレスのリストを受信しないalors、

関連する問題