Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Абстракция фичи #29

Open
aedobrynin opened this issue May 12, 2024 · 0 comments
Open

Абстракция фичи #29

aedobrynin opened this issue May 12, 2024 · 0 comments

Comments

@aedobrynin
Copy link
Owner

aedobrynin commented May 12, 2024

Сейчас у нас есть вот такая связь: если вызван метод контроллера, то обязательно будет флаш изменений в репозиторий, паб-саб и пр. Мне кажется, что от неё нужно избавиться. Почему:

  1. Если мы будем писать длинный текст, то пользователь на другой стороне не увидит его до тех пор, пока мы не выйдем из редактирования
  2. Если будем двигать объект, то у нас будет куча событий со сдвигом его практически по пикселю
  3. При такой связи сложно написать Undo, т.к. для передвижения придётся как-то склеивать изменения в одно, что звучит плохо. (Если не склеивать, то отменять передвижение тоже будем по пикселю за раз)

Есть пока какая-то такая идея: при "начале" какой-то фичи view идёт в controller и получает объект фичи. Дальше вью взаимодействует с этим объектом, пока фича активна. И уже реализация этой фичи решает, когда ей нужно флашить изменения в репозиторий.

  1. Для фичи передвижения объекта будет как-то так:
class IController:
  ...
  def start_move(self, obj_id) -> IMoveFeature
class IMoveFeature:
  def move(delta) -> None
  def finish()

При зажатии ЛКМ на объекте view пойдёт в controller.start_move. Дальше при движении "по пикселю" будем дёргать move_feature.move(delta), а при отжатии ЛКМ будем идти в finish(). В данном случае в методе move будем просто запоминать итоговую позицию, а в finish будем применять изменения к репозиторию

  1. Для фичи редактирования текста как-то так:
class IController:
   def start_editing_text(self, obj_id) -> IEditTextFeature
class IEditTextFeature:
   def edit(???)
   def finish()

Тут в методе edit можем, например, флашить изменения как только написано новое слово или символ

При такой реализации мы даём автору фичи свободу в выборе момента флаша изменений и в выборе момента "слепка" для undo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant