設計の勉強をしています。
Clean Architectureでアプリを作っていて、Viewにリストの内容を表示するために、ViewDataとして、配列を持っているのですが、これは、コレクションオブジェクトにした独自の構造体にした方がいいのでしょうか?例えばgithubのリポジトリ一覧を表示したいとき
swift
1class Repository{ 2 let title:String 3 let description:String 4 let isFavorite:Bool 5}
のような型があった場合、viewDataはコレクションオブジェクトで表現すると
swift
1struct RepositoryList{ 2 let elements:[Repository] 3}
のように表現するのかそれとも単に[Repository]という型で表現するのかどちらの方がいいのでしょうか??
また、上記のコレクションは一種のValue Objectだと思うのですが、お気に入りフラグ(isFavorite)を切り替えようとしたとき、どのような処理を書けばいいのでしょうか??ValueObjectはイミュータブルな処理のため、一つのリポジトリ情報更新ごとに新しい配列を返すようなメソッドがいいかなと思ったのですが、このような処理でいいのでしょうか??
swift
1struct RepositoryListViewDataModel{ 2 let elements:[Repository] 3 4 func updateBookmark(repository:Repository)->Self{ 5 if let index = elements.firstIndex(where: {$0 == repository}){ 6 var elements = elements 7 elements[index] = repository 8 return RepositoryListViewDataModel(elements: elements) 9 }else{ 10 throw Error 11 } 12 } 13}
また、DTOについて書籍で下記のように記載がありました。
これはDTO(Data Transfer Object)と言ってデータ転送用途に使われる設計パターンです。値変更の必要がないのでインスタンス変数はfinalで宣言し、コンストラクタで値が確定するようにします。参照系のみの用途であるため、更新系で使ってはいけません。更新系で用いると低凝集に陥ります。
これとValue Objectの違いがよくわからないのですが、どのような違いがあるのでしょうか?
また、上記のような ViewdataはDTOかVOのどちらなのでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/15 05:21
2022/05/16 00:11 編集