1. Andy Mikhailenko
  2. doqu
  3. Issues
Issue #22 open

Keep Document light and simple

Andy Mikhailenko
repo owner created an issue

The Document class can be considered "light" but still it has become rather bloated: it has methods that are no more than syntax sugar (e.g. {{{object(db)}}}). They increase memory usage, may eclipse some data fields accessed via getattr and make the API more complex (while it's intended to be a dictionary on steroids!).

All extra functionality should be available via helpers and an optional Document subclass (kinda "ManagedDocument" or whatever). Just like the fields: you can define them the way you like but it doesn't add to the documents' API or object weight.

A Document instance is just a representation of a record with or without a schema: mutable (un)saved data; original data; storage reference; key.

Stop feature creep! Save the planet, hmm.

Comments (3)

  1. Andy Mikhailenko reporter
    • changed status to open

    Sometimes mixins make the logic harder to understand. It may be better to have a "semi-bloated" Document class than a mixture of custom logic. Just keep this in mind.

  2. Andy Mikhailenko reporter

    Надо выдрать побольше кода из класса Document в отдельные модули (просто как функции), это значительно упростит тестирование и понимание. Сам Document можно сделать предельно простым и достаточно низкоуровневым; уже ясно, что ссылки между документами требуют пре- и постпроцессинга, большего, чем просто конвертация типов. Этот препроцессинг засоряет весь код Docu. Меж тем, то же самое уже изящно решено для файлов. Значит, и ссылки можно удобно обрабатывать через docu.fields, а базово — через стандартные процессоры in/get/set/out. В результате на "голом" документе появится дополнительная рутина (часть типов данных не будет автоматически корректно конвертироваться), но код document_base и бэкендовых конвертеров станет *значительно* проще. А конвертацию ряда специальных типов (через igso-процессоры) без docu.fields в крайнем случае можно как-то дополнительно стриггерить автоматически. Пока важно разделить код на уровни абстракции и предельно упростить каждый уровень.

  3. Log in to comment