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