プログラマーはクリアします--あなたのインタフェース向けのプログラミングはきっと正しいですか?
妹が文句を言い始めた
妹のゲームは対戦系のゲームで、その中の1つのプレイヤーの概念があって、プレイヤーは攻撃することができて、この業務はまさに妹が頭をかく起点です
プロダクトマネージャ:プレイヤーには多くの属性があります.例えば、身長、性別blalala、プレイヤーは他のプレイヤーを攻撃することができます.
YY妹がプログラムを書くのも簡単で、一日でプログラムを完成させ、palyerのベースクラスを抽象化し、高級プログラマーの必須スキルと言える.
プロダクトマネージャ:ゲームではロボットプレイヤーを増やしてオンラインの人数を増やす必要があります.ロボットの属性は実際のプレイヤーと同じですが、攻撃は違います.
この需要を修正するのはやはり难しくてYY妹、数日もしないうちにコードを変更して、ロボットプレイヤーのクラスを追加して、OOの継承を使いました.ここではプレイヤー抽象クラスにいいねをします
プロダクトマネージャ:プレイヤーのようなモンスターを作成します.実際のプレイヤーの属性はありませんが、実際のプレイヤーと同じように攻撃行為があります.
この時YY妹はついに攻撃が行為であることに気づき、抽象的なインタフェースが必要になった.
ここまで来て、私たちはみんながよく知っているインタフェース向けのプログラミングに出会った.間違いなく、このやり方は正しい.これも設計の大きな原則である:プログラムはインタフェースに依存し、具体的な実現に依存しない.ここでYYのためにいいねを続けます.ちなみに、多くの場合、多くの学生はここまでです.
製品マネージャー:私は今プレイヤーの攻撃方式を設計します.現在、遠隔攻撃、近距離攻撃、身近な攻撃の3種類があります.その他の需要はblalalalalaです.
今はYYちゃんの心の中には1万頭のアルパカが漂っている状態だそうです.今回はどのようにデザインしますか?これも料理のポイントです.今、私たちは心を静めて考えなければなりません.なぜ私たちはインタフェース向けのプログラミングを使っていますか.今回のニーズに直面して、プログラムはやはり多くのものを修正する必要がありますか.
設計原則:応用の中で将来変化する可能性のある場所を見つけて、彼らを独立させて、それらの不変のコードと混同する必要はありません.
このような概念は簡単で、確かに各設計モードの背後にある魂がある.これまで、デザインはAttackというインタフェースに変わりつつあり、より正確にはAttackという行為であるべきである.インタフェース向けという概念は問題なく、多くの人が言語面と設計面のインタフェースの意味を理解していないため、本当のインタフェース向けプログラミングはアーキテクチャ中の行為向けプログラミングに偏っており、もう一つの角度ではOOを利用する多態原則と見なすことができる.
ここでは,Attack挙動をより系統的に一種類の挙動として定義することができ,具体的な挙動実装はクラスタアルゴリズムとして記述できる.考えてみれば、Attackの行為は実際にプレイヤーのタイプに作用するだけでなく、製品マネージャーが新たにXXオブジェクトを追加しても攻撃行為を持っています.理想的には、私はこのxxオブジェクトにAttack行為を持たせるだけで、以前のコードを変更する必要はありません.あなたは今、この行為の定義をもっと深く理解しているのではないでしょうか.
どちらかというと、これまでYY妹のコードの中でずっと継承的に行動を実現してきたのですが、これは何か問題がありますか?プログラム実行時にプレイヤーのAttack動作を動的に変更するには、力不足に見えます.
ここでは、一般的には、より良い可能性があります.具体的な概念は:多く組み合わせを使って、少なく継承を使います.継承は通常、プレイヤーのベースクラスに名前という属性があり、継承クラスはこの属性を完全に継承することができ、問題は発生しません.組み合わせは行為の設計に多く使われています.この行為のタイプのため、私は多くのものの中で現れる可能性があります.組み合わせでより大きな弾性設計を実現することができます.
パッケージング動作クラスタ
物事には行動の組み合わせが含まれている
インタフェースは1種の規範と制約で、もっと高いレベルの抽象は更に1類の行為のようで、インタフェース向けのプログラミングはただコード層の体現の1種のフォーマットの体現だけで、本当のインタフェース向けの設計は更に行為向けのプログラミングに近いです
注目を追加し、より美しいバージョンを表示し、より素晴らしいものを得る
ビジネスの背景
妹のゲームは対戦系のゲームで、その中の1つのプレイヤーの概念があって、プレイヤーは攻撃することができて、この業務はまさに妹が頭をかく起点です
第一次需要
プロダクトマネージャ:プレイヤーには多くの属性があります.例えば、身長、性別blalala、プレイヤーは他のプレイヤーを攻撃することができます.
YY妹がプログラムを書くのも簡単で、一日でプログラムを完成させ、palyerのベースクラスを抽象化し、高級プログラマーの必須スキルと言える.
//
abstract class Player
{
public string Name { get; set; }
//.
//.
//.
//
public abstract void Attack();
}
//
class PersonPlayer : Player
{
public override void Attack()
{
//to do something
return;
}
}
第2次需要
プロダクトマネージャ:ゲームではロボットプレイヤーを増やしてオンラインの人数を増やす必要があります.ロボットの属性は実際のプレイヤーと同じですが、攻撃は違います.
この需要を修正するのはやはり难しくてYY妹、数日もしないうちにコードを変更して、ロボットプレイヤーのクラスを追加して、OOの継承を使いました.ここではプレイヤー抽象クラスにいいねをします
class RobotPlayer : Player
{
public override void Attack()
{
// to do something
return;
}
}
第3次需要
プロダクトマネージャ:プレイヤーのようなモンスターを作成します.実際のプレイヤーの属性はありませんが、実際のプレイヤーと同じように攻撃行為があります.
この時YY妹はついに攻撃が行為であることに気づき、抽象的なインタフェースが必要になった.
//
interface IAttack
{
void Attack();
}
//
abstract class Player
{
//
}
//
class PersonPlayer :Player, IAttack
{
public void Attack()
{
//to do something
return;
}
}
//
class RobotPlayer :Player, IAttack
{
public void Attack()
{
// to do something
return;
}
}
//
class MonsterPlayer : IAttack
{
public void Attack()
{
// to do something
return;
}
}
ここまで来て、私たちはみんながよく知っているインタフェース向けのプログラミングに出会った.間違いなく、このやり方は正しい.これも設計の大きな原則である:プログラムはインタフェースに依存し、具体的な実現に依存しない.ここでYYのためにいいねを続けます.ちなみに、多くの場合、多くの学生はここまでです.
第4次需要
製品マネージャー:私は今プレイヤーの攻撃方式を設計します.現在、遠隔攻撃、近距離攻撃、身近な攻撃の3種類があります.その他の需要はblalalalalaです.
今はYYちゃんの心の中には1万頭のアルパカが漂っている状態だそうです.今回はどのようにデザインしますか?これも料理のポイントです.今、私たちは心を静めて考えなければなりません.なぜ私たちはインタフェース向けのプログラミングを使っていますか.今回のニーズに直面して、プログラムはやはり多くのものを修正する必要がありますか.
設計原則:応用の中で将来変化する可能性のある場所を見つけて、彼らを独立させて、それらの不変のコードと混同する必要はありません.
このような概念は簡単で、確かに各設計モードの背後にある魂がある.これまで、デザインはAttackというインタフェースに変わりつつあり、より正確にはAttackという行為であるべきである.インタフェース向けという概念は問題なく、多くの人が言語面と設計面のインタフェースの意味を理解していないため、本当のインタフェース向けプログラミングはアーキテクチャ中の行為向けプログラミングに偏っており、もう一つの角度ではOOを利用する多態原則と見なすことができる.
ここでは,Attack挙動をより系統的に一種類の挙動として定義することができ,具体的な挙動実装はクラスタアルゴリズムとして記述できる.考えてみれば、Attackの行為は実際にプレイヤーのタイプに作用するだけでなく、製品マネージャーが新たにXXオブジェクトを追加しても攻撃行為を持っています.理想的には、私はこのxxオブジェクトにAttack行為を持たせるだけで、以前のコードを変更する必要はありません.あなたは今、この行為の定義をもっと深く理解しているのではないでしょうか.
どちらかというと、これまでYY妹のコードの中でずっと継承的に行動を実現してきたのですが、これは何か問題がありますか?プログラム実行時にプレイヤーのAttack動作を動的に変更するには、力不足に見えます.
ここでは、一般的には、より良い可能性があります.具体的な概念は:多く組み合わせを使って、少なく継承を使います.継承は通常、プレイヤーのベースクラスに名前という属性があり、継承クラスはこの属性を完全に継承することができ、問題は発生しません.組み合わせは行為の設計に多く使われています.この行為のタイプのため、私は多くのものの中で現れる可能性があります.組み合わせでより大きな弾性設計を実現することができます.
動作向けプログラミング(千言万語は10行.Net Coreコードに及ばない)
パッケージング動作クラスタ
//
interface IAttack
{
void Attack();
}
class RemoteAttack : IAttack
{
public void Attack()
{
//
}
}
class ShortAttack : IAttack
{
public void Attack()
{
//
}
}
物事には行動の組み合わせが含まれている
//
abstract class Player
{
//
}
//
class PersonPlayer : Player
{
//
IAttack attack;
public PersonPlayer(IAttack _attack)
{
attack = _attack;
}
public void Attack()
{
//
attack.Attack();
return;
}
//
public void ChangeAttack(IAttack _attack)
{
attack = _attack;
}
}
最後に書く
インタフェースは1種の規範と制約で、もっと高いレベルの抽象は更に1類の行為のようで、インタフェース向けのプログラミングはただコード層の体現の1種のフォーマットの体現だけで、本当のインタフェース向けの設計は更に行為向けのプログラミングに近いです
注目を追加し、より美しいバージョンを表示し、より素晴らしいものを得る