大規模なシステムの設計はどのように始めればよいでしょうか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/15690

  •  08-06-2019
  •  | 
  •  

質問

私は大規模な新しいシステムの背後にある唯一の開発者になると言われました。とりわけ、UI とデータベース スキーマを設計します。

指導は受けられると思いますが、彼らの靴下を脱がせるようになりたいと思っています。その間に何を準備すればよいでしょうか?また、この仕様のコンピューターに向かうときに何に留意する必要がありますか?

留意すべき点がいくつかあります:私は大学生で、初めて本格的にプログラミングの仕事に就きました。Javaを使用します。自動テストなどを備えた SCM がすでにセットアップされているため、ツールは問題になりません。

役に立ちましたか?

解決

OOP について詳しく知っていますか?その場合は、Spring と Hibernate を調べて、実装をクリーンな状態に保ちます。 直交. 。それが理解できれば、特に「自動テスト」が稼働しているので、設計をコンパクトで無駄のない状態に保つための TDD が良い方法であることがわかるはずです。

アップデート:最初の多数の回答を見て、これ以上同意することはできませんでした。特に Java 分野では、オブジェクトを使用してアプリケーションを開発する際の指導者やリソースがたくさん見つかるはずです。 データベース中心のアプローチではない. 。通常、データベースの設計は Microsoft 担当者にとっての最初のステップです (私も毎日行っていますが、回復プログラム、つまり Alt.Net を実行中です)。顧客に提供する必要があるものに焦点を当て続け、オブジェクトを永続化する方法を ORM に理解させれば、設計はより良くなるはずです。

他のヒント

これは私の最初の仕事によく似ています。大学を卒業してすぐに、私はデータベースとビジネス ロジック層の設計を依頼され、他の人が UI を担当することになりました。その間、上司は私の肩越しに私の赤ちゃんを眺め、かつては自分の赤ちゃんだったが、今は私のものになった赤ちゃんを手放す気はなく、赤ちゃんの中に指を突っ込んでいました。3 年後、開発者は会社から逃げ出し、実際に何かを販売するまでにはまだ X か月かかりました。

大きな間違いは、野心的すぎたことだ。これが初めての仕事であれば、 意思 間違いを犯す、そしてあなたは 意思 書いた後もずっと動作方法を変更する必要があります。データベース レベルと他の開発者に提供する API の両方で、システムを必要以上に複雑にするあらゆる種類の機能がありました。結局、すべてを一度にサポートするには複雑すぎるため、そのまま終了しました。

そこで私のアドバイス:

  1. このような大きな仕事を一人で引き受けることに自信がない場合は、やめてください。雇用主にその旨を伝え、あなたを助けてくれる人を一緒に働く人を見つけるか雇ってもらいましょう。プロジェクトに人を追加する必要がある場合は、問題が発生し始めた後ではなく、開始近くに行う必要があります。

  2. 製品が何のためにあるのかを注意深く考え、それを要約すると、 最も単純な あなたが考えることができる一連の要件。仕様を提供する人が技術者ではない場合は、その人が書いたものを参考にして、実際に機能して収益を得ることができるものを確認してください。顧客や営業担当者と話し、市場を理解します。

  3. 自分が間違っていると認めるのは恥ずかしいことではありません。最初のバージョンで何らかの間違いを犯したために、システム全体を書き直す必要があることが判明した場合は、できるだけ早くそれを認めて、対処できるようにすることをお勧めします。同様に、最初のバージョンで考えられるあらゆる不測の事態を予測できるアーキテクチャを作成しようとしないでください。あらゆる不測の事態が何であるか分からず、間違ってしまうだけだからです。捨てて最初からやり直すことを念頭に置いて一度書いてください。そうする必要はないかもしれません。最初のバージョンで問題ないかもしれませんが、そうする場合は認めてください。

私もデータベースから始めるという意見には反対です。DB は、ビジネス オブジェクトがどのように永続化されるかを示す単なる成果物です。Java に同等のものは知りませんが、.Net には次のような優れたツールがあります。 サブソニック これにより、ビジネス オブジェクトの設計を反復する際に、DB 設計を流動的に保つことができます。何よりもまず (どのテクノロジーを導入するかを決定する前であっても) プロセスに焦点を当て、名詞と動詞を特定する必要があると思います。次に、それらの抽象化から構築します。OOP 101 で教えたように、これは「現実世界」でも実際に機能します。

コーディングを開始する前に、データベース スキーマを計画します。他のすべてはそこから流れます。データベースを早い段階で適切に正しく設定しておくと、後で手間が省け、時間を節約できます。

重要なのは、システムの複雑さを抽象化して、使い始めてすぐに行き詰まらないようにすることです。

  • まずは仕様書を物語のように読んでください(ざっと目を通すだけです)。すべての要件をその場で分析するために立ち止まってはいけません。これにより、詳細をあまり把握せずにシステムの全体像を把握できます。この時点で、システムの主要な機能コンポーネントの特定を開始します。これらを書き留め始めます (必要に応じてマインドマップ ツールを使用してください)。

  • 次に、各コンポーネントを取り出して展開を開始します (そして、各詳細を仕様文書の要件と結び付けます)。すべての要件をカバーするまで、すべてのコンポーネントに対してこれを繰り返します。

  • ここで、コンポーネント間の関係、およびさまざまなコンポーネント間で機能の繰り返しがあるかどうかを確認し始める必要があります (これを抽出してユーティリティ コンポーネントなどを作成できます)。この時点で、要件の詳細な地図が頭の中にあるでしょう。

  • ここで、データベース、ER 図、クラス設計、DFD、デプロイメントなどの設計について考える必要があります。

最後のステップを最初に実行する場合の問題は、最初から全体的な理解が得られないまま、システムの複雑さで行き詰まってしまう可能性があることです。

私はその逆をやります。データベース スキーマ ファーストを実行すると、システムが永続性から抽象化するのが難しいデータ駆動型の設計に陥ってしまうことがわかりました。最初にドメインモデルの設計を試みます その後 データベース スキーマはそれらに基づいて作成されます。

次に、インフラストラクチャの設計があります。チームは何よりもまず、プログラムをどのように構成するかについて規約を確立する必要があります。次に、システムの共通機能 (たとえば、永続性、ロギングなど、誰もが必要とするもの) の設計について最初に合意するために協力します。これがシステムの枠組みとなります。

残りの機能を自分たちで分担する前に、まず全員でこれに取り組んでいます。

私の経験では、データベースを最後に考慮する Java アプリケーション (.NET も) は、企業環境に導入するとパフォーマンスが低下する可能性が高くなります。視聴者のことを真剣に考える必要があります。それがウェブアプリであるかどうかについては言及しませんでした。いずれにしても、データの処理方法を検討する際には、実装しているインフラストラクチャが重要です。

どのような方法論を検討するとしても、データをどのように取得して保存するか、そしてそれがパフォーマンスに与える影響は、最優先事項の 1 つであるはずです。

このアプリケーションがどのように使用されるかを検討することをお勧めします。将来のユーザーはそれをどのように操作するのでしょうか?このアプリケーションが何を処理する必要があるかについて、少なくともいくつかのことはご存知だと思いますが、私の最初のアドバイスは、「ユーザーとユーザーが何を必要としているかを考えてください」ということです。

コードをどこで区切るかを考えながら、普通の紙に書きます。ロジックと GUI コードを混同しないように注意してください (よくあるエラー)。このようにして、将来的にはアプリケーションの範囲をサーブレットやアプレット、または今後登場するあらゆるプラットフォームに拡張することができます。レイヤーに分けてセクション化すると、すべてを再構築することなく、大きな変更に迅速に対応できます。レイヤーには、最も近い隣接レイヤー以外のレイヤーが表示されないようにします。

真のコア機能から始めます。そうした時間のかかる無駄なこと (プロジェクトが 4 週間遅れることになります) など、ほとんどのユーザーにとっては大した問題ではありません。予定通りに配達できることが確認できたら、後で追加することもできます。

ところで。デザインとは関係ありませんが、納期が守れないと言いたいだけです。消費時間を現実的に見積もって、それを 2 倍にしてください :-) ここでは、このプロジェクトにあなたは 1 人ではなく、プロジェクトの進行に合わせて人々が出入りするものと仮定します。プロジェクトの途中で従業員を訓練したり、休暇を取ったり、手術が必要になったりする必要がある場合があります。

大きなシステムを小さな部分に分割します。通常はそれほど複雑ではないため、それがそれほど複雑であるとは考えないでください。複雑に考えすぎると、思考が台無しになり、最終的にはデザインが台無しになってしまいます。ある時点で、同じことをもっと簡単に実行できることに気づき、それを再設計します。

少なくとも、これは私の設計上の大きな間違いでした。

単純にする!

新しい大規模プロジェクトの開始について、非常に洞察力に富んだアイデアを見つけました。

  • 一般的な良い習慣
  • テスト駆動開発
  • そして実践的なアプローチ

本の中で テストに導かれて成長するオブジェクト指向ソフトウェア.

まだ開発中ですが、最初の 3 章があなたが探しているものであり、私見では読む価値があるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top