私はこのアーキテクチャを初めてWinformで実装しようとしています。だから、私にとってはシンプルだが非常に重要な質問がある。 簡単な例を考えてみましょう。私はフォームがユーザーリストを取得し、電話番号の変更を許可するようにします。 Winform Appの3層アーキテクチャ
public Form1()
{
InitializeComponent();
UserService _userService = new UserService();
listBoxUsers.DataSource = _userService.GetAllUsers();
}
class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
}
class UserService
{
UserRepository _userRepository=new UserRepository();
public Dictionary<int, string> GetAllUsers()
{
DataTable dtbl= _userRepository.AllUsers();
//Some code here
return dict;
}
}
class UserRepository
{
public DataTable AllUsers()
{
//Sql query
return dtbl;
}
}
今lisboxでユーザを選択することにより、私は電話番号のようないくつかの情報を表示することができるよ私は、これが最初のステップを持っている(簡略化及びIは、通常、インタフェースを使用します)。電話番号を変更するときは、SQLデータベースを更新するためにUpdatePhoneNumberというメソッドが必要です。 しかし、どこに配置するのですか? UserまたはUserService(私はSQLクエリについて、ロジックだけは話しません) その後、フォームに表示するには、このユーザープロパティに(ここや他のどこかの)アプリケーションにアクセスする方法はありますか? _user.Id(ユーザーはフォームでインスタンス化する必要があります)または_userServiceを実装します。このIDはUser.IDを取得します(この場合、FormはUserServiceクラスのみを認識します)。 貴重なご協力ありがとうございます
なぜ 'GetAllUsers()'は 'Dictionary'を返しますか?私は 'Dictionary '(あるいは単に 'IEnumerable ')を期待しています。 'User'は*単なる*データ転送オブジェクトです。だから、電話番号*や他のプロパティ*を変更するときは、DTOで変更して、サービスやリポジトリに 'Update(User user)'のようなメソッドを置いてください。何か変更があったかどうかをチェックするサービスと、実際にデータベースに変更を書き込むリポジトリ(または何らかのストレージの種類)を担当するサービス。 –
Corak