Как я могу иметь модель данных на основе протокола, учитывая мутации и отношения? - PullRequest
0 голосов
/ 20 июня 2019

Я немного учусь, и мне интересно, есть ли какой-нибудь лучший метод для моделирования данных, не зависящих от инфраструктуры постоянства.

Я в порядке с такими мелочами, как:

protocol Item {
    var identifier: String { get }
    var name: String { get set }
}

и

struct SomeItem: Item {
  let identifier: String = UUID().uuidString
  var name: String = "New Item"
}

и его менеджер, что-то вроде:

protocol ItemManager {

    /// get some objects matching query criteria
    func objects(matching query: Query) -> [Item]

    /// get a specific object
    func object(withID identifier: String) -> Item?

    /// commit these to disk.
    func save(_ object: Item) throws

    /// deletes the objects from disk.
    func delete(_ objects: [Item])

    /// creates a new object but does not save it.
    func create() -> Item
}

Но предположим, что теперь мы хотим пометить элементы категориями.

Каков наилучший способ управлять / изменить эти отношения? На модели или через менеджерский метод?

В конечном счете, я хочу построить модель данных, ориентированную на протокол, и иметь возможность менять тип персистентности. Например, для тестирования или проверки, или просто если я использую CoreData для запуска, но затем хочу переместить что-то вроде Realm.io и не нужно переписывать мое приложение.

Было бы замечательно, если бы кто-то мог указать мне правильное направление, будь то ссылки и ресурсы для моего рассмотрения.

Я знаю, что этот вопрос немного расплывчатый, но я не знаю, как еще его задать. Если я в корне ошибаюсь, пожалуйста, прокомментируйте!

1 Ответ

0 голосов
/ 21 июня 2019

мы начали моделировать «данные в движении», то есть протокол данных, используя нотацию моделирования UML. Протоколы данных лучше выражаются с помощью нотаций диаграмм классов UML.

В UML класс рассматривается как сущность, атрибуты класса совпадают с атрибутами в сущности, ассоциация аналогична связи в моделировании ER.

Пожалуйста, прочитайте нотацию UML Modeling для более подробной информации.

надеюсь, это поможет.

...