Как инкапсулировать бизнес-логику web2py? - PullRequest
4 голосов
/ 01 августа 2011

Я только что нашел 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, например, кажется очень мощной функцией, тесно связанной с другими помощниками. Интересно, ограничит ли какая-либо из этих функций разделение моей бизнес-логики, как указано выше?

1 Ответ

2 голосов
/ 02 августа 2011

Я думаю, что отчасти разница в том, что web2py использует DAL (уровень абстракции базы данных), а не ORM. это объяснение может оказаться полезным .Как указано, в некоторых случаях вычисляемые поля или виртуальные поля могут делать то, что вы хотите.Кроме того, некоторые методы, определенные в вашем примере класса, будут довольно простыми операторами DAL и, вероятно, не будут стоить писать методы для.

Конечно, если вы хотите, вы можете определить классы и функции в ваших моделях (или модули) и просто вызывайте их с контроллеров - все, что лучше для вас.

...