Skip to content

Instantly share code, notes, and snippets.

@amogil
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amogil/39586f71e135d0836de1 to your computer and use it in GitHub Desktop.
Save amogil/39586f71e135d0836de1 to your computer and use it in GitHub Desktop.
Пример гибкости на миксинах
module DB
def save
// ..
end
end
class DbUser
include DB
def make_move
// ..
save
// ..
end
---------------
// Ставим польностью новую реализацию DB
---------------
class DbUser
// Единственное изменение во всех классах-пользователях, заменить include
include BrandNewDB
end
module DB
def save(what)
// ..
end
end
class DbUser
def make_move
// ..
DB::save self
// ..
end
end
---------------
// Ставим польностью новую реализацию DB
---------------
class DbUser
def make_move
// ..
// Попадаем на замену упоминания класса во использованиях по коду во всех классах-пользователях
BrandNewDB::save self
// ..
end
end
@vast
Copy link

vast commented Aug 10, 2015

Потому что зависимости надо изолировать:

class DbUser
  def make_move
    storage.save(self)
  end

  private

  def storage
    BrandNewDB
  end
end

@amogil
Copy link
Author

amogil commented Aug 10, 2015

Получили то же решение, что и на миксинах, но на один метод больше, нет?

@chrome
Copy link

chrome commented Aug 14, 2015

class DbUser
  include DB
  include User
  include SomeOtherShit

  def make_move
    save # а теперь угадай откуда этот save взялся
  end
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment