CodeFlowCodeFlowテーブルデザインに基づくモデリングクラス23これは通常どのようにクラスを設計するのでしょうか。他のテーブルへの外部キーを含むテーブルはどうでしょうか。person_id各テーブルにクラスを作成するのがよい習慣でしょうか。Architectureのパターンを読むことをお勧めします。これには、クラスとテーブル間のマッピングのパターンがいくつかあります。source3テーブルごとに1つのオブジェクトが必ずしも良い設計だとは思いません。1つのサイズにすべてのルールを当てはめることは困難ですが、オブジェクトはより豊かでよりきめの細かいものにすることができます。データベースは、オブジェクトに適用されない理由で非正規化できます。その場合は、テーブルよりも多くのオブジェクトがあります。privateリストマップ。}source2ほとんどの場合、テーブルをエンティティにマップする傾向がありますが、それは厳密な規則ではありません。問題となっている特定のエンティティのリポジトリが特定のエンティティを取り巻く一般的な問題に対処するほうが得策な場合もあります。エンティティとして存在する必要がないため、結果として他のテーブルを扱うことになります。私がしたことがないこと(依存データが常にエンティティと一緒に取得される必要がある非常に特別な計画の場合を除く)は、エンティティまたはエンティティの集合を別のエンティティのプロパティとして設定することです。代わりに、そのエンティティは、そのIDを介して発見可能であり、それは親エンティティの財産であるか、または親エンティティに関して関連するリポジトリを介して発見可能である。"info"ヘルパークラスを使用します。+`オブジェクトのコレクション。このようにして、すべてのエンティティクラスは可能な限り軽量のままであり、依存データをロードする必要があるとは想定していません。エンティティクラスに子オブジェクトのコレクションを作成する場合によく見られるような、面倒なORM領域に強制することなくリポジトリモデルをクリーンに保ちます。ORMなしでそれを実行すると、子をロードするかどうか、および子がロードされたかどうかを想定することが厄介な問題になります。source1私はいつもテーブルごとのクラスを持っているとは言いません、特にあなたが多対多の関係を持っているとき。あなたがidとperson_type_idの両方を持っているのか私にはわかりませんが、それらは同じものですが、ここにクラスがあります。{//これはキーワードなので、Typeをプロパティ名として使用することはお勧めしません。}}source1ユーザーがデータ入力担当者でない限り、一般的にはユースケース/ユーザーストーリーからクラスを設計することをお勧めします。データベースがすでに存在していても。ユーザーが自分の仕事をするのを手助けするようにソフトウェアを期待するのではなく、自分の仕事がソフトウェアを行使することであると想定することは結局のところ簡単です。明らかに彼らはある時点で交差する必要があります。Fowlerの本は最初から始めるのに最適な場所だと私は同意します。私は彼がこの見方を強化すると思います。クラスとデータベースの両方を正しく理解するのに役立つモデリングの観点が必要な場合は、オブジェクトロールモデリングを検討してください。source0オブジェクトリレーショナルマッピング(ORM)を使用する予定の場合は、これがテーブルデザインに影響を与える可能性があります。[Hibernate]は、同じツリー内での混合継承マッピング戦略を好まない。ORMを使用しないことを明確に示したので、従来のデータベース設計原則に従うことができます。[ここで非正規化についてお読みください]。DAOs)を使用することです。customer)は、CustomerDaoExceptionをスローします。update(ロングID、カスタマーカスタマー)はCustomerDaoExceptionをスローします。id)は、CustomerDaoExceptionをスローします。findAll()はCustomerDaoExceptionをスローします。id)は、CustomerDaoExceptionをスローします。companyId)はCustomerDaoExceptionをスローします。DAOの例(この例ではJavaジェネリックを使用しています)を見つけたとしても関係ありません。各テーブルにクラスを作成するのがよい習慣でしょうか。_あなたはORMを使っています。オブジェクトをリレーショナルテーブルにマッピングしています。あなたがそうするために事前に構築されたライブラリを使うかどうかはあなたの呼び出しです。なければ、おそらく既存のORMのすべての鐘と笛がなくても、自分で実装することになります。Mapperパターンです。それぞれに長所と短所があります。ActiveRecordパターンを使用して、属性がテーブル列を定義するクラスを定義します。このクラスの各インスタンスはデータベース内の行に対応し、新しいインスタンスを作成(および保存)することによって、データベース内に新しい行を作成します。それについてのより多くの情報はここで利用可能です:http://en.wikipedia.org/wiki/Active_record_patternデータマッパーパターンでは、テーブルごとにテーブルオブジェクトを定義し、テーブルの列を既存のクラスに割り当てるマッパー関数を作成します。SQLAlchemyはデフォルトでこのパターンを使用します(ただし、SQLAlchemyの機能を別のインターフェースに適応させるActiveRecord型拡張モジュールがあります)。このパターンの簡単な紹介はSQLAlchemyのドキュメントにあります。"そのセクションではSQLAlchemyを使ったActiveRecordについて説明しています。)ActiveRecordパターンは設定が簡単で、作業が簡単です。データベースを明確に表すクラスが用意されているため、読みやすさの面で利点があります。副次的な利点として、ActiveRecordクラスの宣言的な性質は、データベーススキーマに対する明確で直接的なドキュメントとして効果的に機能します。データマッパーパターンを使用すると、データをクラスにマッピングする方法がはるかに柔軟になるため、テーブルとクラスの間の多少なりとも1対1の関係に縛られることはありません。永続化レイヤをビジネスコードから分離します。必要に応じて、後で他の永続化メカニズムを交換することができます。データベースをバックアップ用に設定しなくても、クラスをより簡単にテストできるということです。SQLAlchemyのマッパー設定の詳細については、http://www.sqlalchemy.org/docs/05/mappers.htmlをご覧ください。SQLAlchemyのようなライブラリの使用を計画していなくても、クラスをデータベーステーブルにマッピングする際に考慮しなければならない可能性があるオプションのいくつかを参照するのに役立つはずです。source0このデータベースからクラスへの視点のアプローチは、多くのコードを非常に素早くクランキングすることにつながる可能性があります。このコードのかなりの部分は何の役にも立たないか、または何らかの重大な突然変異を必要とするでしょう。言い換えれば、表示とワークフローが一致しない特定のクラスを作成する可能性があります。アプリ、ユーザーのニーズ、一般的なワークフローを検討してください。あなたのディスプレイをモックします。ディスプレイを使用するために必要なクラスに集中し、それらのニーズの後でストレージをモデル化します(db設計)。あなたのクラスのほとんどは当然あなたのディスプレイのための解決策を提供する傾向があるので、たぶんあなたはあなたがまっすぐなテーブルクラスの少数しか持っていないということです。4backgroundWorkerの外部クラスから呼び出されたメソッドからフォーム上のメソッドを呼び出す方法を教えてください。