Как выглядит класс быстрой модели, если я следую MVC и сохраняю данные с помощью RealmSwift? - PullRequest
0 голосов
/ 08 мая 2019

Я новичок в Swift и разрабатываю приложение To-do только для практики.В этом приложении данные сохраняются с помощью RealmSwift, и я попытался следовать шаблону проектирования MVC.Тем не менее, я получил совет, что модель класса не хватает логики и должна быть скорректирована.Пожалуйста, дайте мне несколько советов по улучшению моего кода.В моем главном Viewcontroller я создал эти переменные для сохранения данных

let realm = try! Realm()

var itemList : Results<Item>!

, и в моем главном View Controller также есть метод для манипулирования данными:

func save(item : Item) {
        do {
            try realm.write {
                realm.add(item)
            }
        }

        catch{
            print("Error saving category, \(error)")
        }

        tableView.reloadData()
    }

    func loadItems() {

        itemList = realm.objects(Item.self)

        tableView.reloadData()

    }

Вот моя модель данных:

import Foundation
import RealmSwift

class Item : Object {
    @objc dynamic var title : String = ""
    @objc dynamic var done : Bool = false
    @objc dynamic var note: String = ""
    @objc dynamic var dateCreated : Date?

    convenience init(title: String, note: String) {
        self.init()
        self.title = title
        self.note = note
        self.dateCreated = Date()
        self.done = false
        }


}

Насколько я понимаю, Модель в MVC должна содержать класс данных и все методы для манипулирования данными, но я не знаю, как реструктурировать мой код.Здесь полно моего кода https://github.com/lequocgiom/Reminder/tree/master/Reminder2

Спасибо за ваше время, я буду очень признателен, если кто-то может мне помочь.

1 Ответ

1 голос
/ 08 мая 2019

Это очень интересный вопрос

В основном модель должна содержать только свойства так что он работает только как «хранилище»

Методы для манипулирования моделями должны быть размещены в части «Контроллер» вашего кода

Но, пожалуйста, не помещайте его в ViewController, как это делают некоторые учебники. Это очень плохая практика, и ее следует избегать, чтобы поддерживать архитектуру в чистоте (если MVC может быть чистым (просто шутка)). Создайте новый класс, например ItemManager, который будет работать с моделями.

Итак, ваша логика будет выглядеть так:

  1. «Контроллер» (логика бизнеса) вызывает ItemManager, когда он хочет получить / удалить / редактировать / создать новые модели
  2. ItemManager выполняет запрос (или другие действия) с помощью Realm (CoreData / SQL / REST / ...) и возвращает элементы обратно в «Контроллер»

Этот подход приведет вас к более чистому коду и некоторым другим архитектурам (если вам нужно)

...