graphql-python / graphene-sqlalchemy

Graphene SQLAlchemy integration
http://docs.graphene-python.org/projects/sqlalchemy/en/latest/
MIT License
974 stars 225 forks source link

MVC: support business logic layer #411

Open ego opened 2 months ago

ego commented 2 months ago

We have Model and View aka Node, but we lack a way to write code between them.

class PetBusinessLogic:
    def __init__(self, pet):
        self.pet = pet

    @property
    def name1(self):
        return self.pet.name + "!"

    @property
    def name2(self):
        return self.pet.name + "!"

class Pet(SQLAlchemyObjectType):
    class Meta:
        model = PetModel
        name = "Pet"
        interfaces = (relay.Node,)
        batching = True

    def resolve_name1(node, info):
        # write here application logic code for a large project is not good idea.
        # so we need some controller aka PetBusinessLogic
        return PetBusinessLogic(node).name1    # DRY and I would like to initialize it once

    def resolve_name2(node, info):
        return PetBusinessLogic(node).name2  # DRY and I would like to initialize it once

Any suggestions for this design problem? *(put this PetBusinessLogic into model is also bad idea)

ego commented 2 months ago

@syrusakbary any thoughts?