2

次の命名規則とパッケージング規則について疑問に思っています。

thufir@dur:~/NetBeansProjects/USENET$ 
thufir@dur:~/NetBeansProjects/USENET$ tree src/
src/
├── META-INF
│   └── persistence.xml
├── net
│   └── bounceme
│       └── dur
│           └── usenet
│               ├── controller
│               │   ├── CommentsDefaultListModel.java
│               │   ├── GroupDefaultListModel.java
│               │   ├── MessageBean.java
│               │   └── MessagesDefaultListModel.java
│               ├── model
│               │   ├── Articles.java
│               │   ├── NewsgroupsArticles.java
│               │   ├── Newsgroups.java
│               │   ├── PropertiesReader.java
│               │   └── Usenet.java
│               └── swing
│                   ├── Comments.form
│                   ├── Comments.java
│                   ├── Groups.form
│                   ├── Groups.java
│                   ├── MainFrame.form
│                   ├── MainFrame.java
│                   ├── Messages.form
│                   ├── Messages.java
│                   ├── PanelWithTabs.form
│                   └── PanelWithTabs.java
└── usenet.properties

8 directories, 21 files
thufir@dur:~/NetBeansProjects/USENET$ 

swing パッケージには、「モデル」タイプの Swing クラスを除いて、Swing GUI クラスを入れました。それらはJPaneのものとはちょっと違うように見えるのでMessagesDefaultListModel、コントローラーパッケージに入れました。これは、「モデル」パッケージからデータを取得するため、少なくとも私の考えでは、それ自体は実際にはモデルではないためです。したがって、JList のモデルではありますが、私はそれをコントローラーと見なしています MessagesDefaultListModel

NewsgroupsArticlesおよびNewsgroupsArticles@Entity クラスなので、モデル パッケージに入れます。これらのエンティティは、表newsgroupsarticlesおよびに対応していnewsgroups_articlesます。

これは正気のパッケージングとネーミングですか?

4

1 に答える 1

2

私は通常、最初に機能レベルの分離を行い、次に機能ドメイン内で 2 番目の技術的分離を行うことを好みます。

代わりにmodelパッケージに名前を付けます。domainコントローラ パッケージに model という名前のクラスがあるのは非常に奇妙に感じます。これらはコントローラーではなく、swing MVC アーキテクチャーのモデルです。

また、ルート パッケージに何かを入れるのも嫌いです。プロパティの解析と保持を担当するクラスと同じように、プロパティ ファイルをパッケージに入れてみませんか。

エンティティには、複数形ではなく単数形の名前を付ける必要があります。これはおそらく、私が目にする最も重要Articlesなリファクタリングです。ArticleArticles

最後に、エンティティとプレゼンテーション関連のクラスが表示されますが、サービス層とデータ アクセス層は表示されません。プレゼンテーション層ではデータ アクセスを行うべきではありません。それはその責任ではありません。そして、トランザクションが (できれば宣言的な方法で) 境界付けられる場所が必要です。それはサービス層である必要があります。ここでは、Spring のような依存性注入フレームワークが非常に役立ち、コードを簡単にテストできるようになります。

于 2012-07-29T09:30:43.077 に答える