私はRealmをいくつかの小さなプロジェクトで使ってきました。私はより大きなプロジェクトでそれを使用することに移りたいと考えています。私はデータアクセスレイヤーの構造を改善したいと考えています。Realmでより良いデータアクセスレイヤを書く方法
私はこの類似したquestionに出くわし、私がそこに見つけた情報を構築しようとしました。ここで議論されているアプローチはDAOパターンなので、私はそれを打ちました。
これは私のモデルクラスです。
class Chat: Object {
dynamic var id: String = ""
dynamic var createdAt: Date = Date()
dynamic var creatorId: String = ""
dynamic var title: String?
let chatMessages = List<ChatMessage>()
override static func primaryKey() -> String? {
return "id"
}
convenience init(fromJSON json: JSON) {
self.init()
// ...
}
}
次に、すべての便利ヘルパーメソッドを保持するためにChatDAOProtocol
を作成しました。
protocol ChatDAOProtocol {
func addMessage(_ message: ChatMessage)
func getChatThumbnail() -> UIImage
func getParticipants(includingMe: Bool) -> [Participant]?
static func getChat(fromId id: String) -> Chat?
static func getChat(fromCreatorId id: String) -> Chat?
}
は、最後に私は、これらすべてのプロトコルメソッドを実装しChatHelper
と呼ばれる別のクラスを作成しました。
class ChatHelper: ChatDAOProtocol {
func addMessage(_ message: ChatMessage) {
}
func getChatThumbnail() -> UIImage {
return UIImage()
}
func getParticipants(includingMe: Bool) -> [Participant]? {
return nil
}
static func getChat(fromId id: String) -> Chat? {
return nil
}
static func getChat(fromCreatorId id: String) -> Chat? {
return nil
}
}
これは、すべてのデータベースに関連するコードをVCのすべてに振りかけるよりも優れています。しかし、私はまだ疑問を持っています。
たとえば、チャットの参加者をすべて取得する必要がある場合は、ChatHelper
クラスのメソッドを呼び出す必要があります。チャットのタイトルを取得したい場合は、Chat
オブジェクトのtitle
プロパティを呼び出します。非常に統一されたインターフェースのようには見えません。ヘルパー内のすべてのプロパティにgetterとsetterを含める必要があります。したがって、Chat
オブジェクトは決して直接呼び出されません(インスタンスを作成する場合を除いて)。
それとも
私はChat
オブジェクト自体はChatDAOProtocol
プロトコルに適合させるべきでしょうか?だから、すべての便利なメソッドとプロパティは直接Chat
オブジェクトから直接アクセスできますか?
これらの両方よりも良い方法がありますか?
返信いただきありがとうございます。あなたが言及したポイントを考慮して、自分のコードを書き直したいと思います。だから、同じ 'Chat'クラスのヘルパーメソッドを使う方が良いとか、ヘルパーメソッドのための別の' ChatHelper'クラスを作る方が良いと思いますか? – Isuru