Я только что нашел web2py пару дней назад и читал документацию и нашел несколько примеров приложений. Я хочу начать программирование больше на Python. Кажется, что мое мнение о MVC немного искажено от их [сообщества web2py].
После изучения и работы с PHP (и фреймворком Kohana) я привык к принципу «тонкий контроллер - толстая модель», когда вся бизнес-логика размещается в модели, а контроллер не делает ничего, кроме как делегирует какие методы выполнять на модели, а затем передает данные в представление для рендеринга. Однако, похоже, что 99% приложений, которые я видел для web2py, имеют толстые контроллеры (помещающие всю бизнес-логику в действия), а модели - это не что иное, как определения таблиц / ограничений.
Я довольно хорошо настроен на мой взгляд на модель, и я бы предпочел поместить бизнес-логику в модели (для повторного использования и DRY-кода), но я не видел ни одного кода онлайн, который делает это, хотя Если честно, я не нашел достаточного количества приложений. Может кто-нибудь направить меня в правильном направлении.
Чтобы было ясно, я хотел бы сделать мои модели настоящими классами и инкапсулировать всю бизнес-логику и взаимодействия с базой данных в явные методы. Что-то вроде ...
class Article(object):
def get_article(self, id):
# Retrieve article by id, using db instance
pass
def get_latest_articles(self, limit):
# Retrieve latest articles
pass
def get_hot_articles(self, limit):
# Retrieve hot articles, based on algorithm for "hot"
pass
def create_article(self, data):
# Insert article
pass
def define_tables(self):
# Define schema the web2py way
pass
Я не нашел правильный способ сделать это.
Я не очень хорошо репетировал на web2py, но я знаю, что есть много возможностей. DAL, например, кажется очень мощной функцией, тесно связанной с другими помощниками. Интересно, ограничит ли какая-либо из этих функций разделение моей бизнес-логики, как указано выше?