Как правильно отделить рендеринг от логики?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно отделить рендеринг от логики?

Сообщение Anonymous »

Я пытаюсь создать простую симуляцию с фигурами, нарисованными на экране. Я слышал, что это хорошая практика, чтобы отделить логику от рендеринга, но я все еще не уверен, как справиться с этим правильно. Если объект не должен представлять себя, где он должен быть реализован? Эта вещь работает, но, возможно, у кого-то есть лучшая идея.from enum import Enum

class ShapeType(Enum):
RECTANGLE = 0,
CIRCLE = 1,
TRIANGLE = 2

class Shape:
def __init__(self, s_type: ShapeType):
self.s_type = s_type

class Rectangle(Shape):
def __init__(self, x, y):
super().__init__(ShapeType.RECTANGLE)
self.x = x
self.y = y

class Circle(Shape):
def __init__(self, r):
super().__init__(ShapeType.CIRCLE)
self.r = r

class Triangle(Shape):
def __init__(self, a, b, c):
super().__init__(ShapeType.TRIANGLE)
self.a = a
self.b = b
self.c = c

class ShapePrinter:
def __init__(self):
self._type_registry = {
ShapeType.RECTANGLE: self.render_rectangle,
ShapeType.CIRCLE: self.render_circle,
ShapeType.TRIANGLE: self.render_triangle
}

def render_rectangle(self, surface, shape: Rectangle):
print(f"Rendering a rectangle ({shape.x}, {shape.y}) on the {surface}")

def render_circle(self, surface, shape: Circle):
print(f"Rendering a circle ({shape.r}) on the {surface}")

def render_triangle(self, surface, shape: Triangle):
print(f"Rendering a circle ({shape.a}, {shape.b}, {shape.c}) on the {surface}")

def render(self, surface, shape: Shape):
if handler := self._type_registry.get(shape.s_type):
handler(surface, shape)
else:
raise Exception('Shape type not supported')

x = ShapePrinter()
x.render('surface1', Rectangle(10, 5))
x.render('surface2', Circle(7))
x.render('surface1', Triangle(3, 4, 5))


Подробнее здесь: https://stackoverflow.com/questions/796 ... c-properly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как отделить графический интерфейс от логики в MFC?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • EF Core View — размещение логики бизнес-логики
    Anonymous » » в форуме C#
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous
  • Размещение логики ввода и логики обработки в C ++ [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Я хочу, чтобы все на карте выровнялось на столбце, за исключением прикрепленного изображения, как мне правильно отделить
    Anonymous » » в форуме Html
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Я хочу, чтобы все на карте выровнялось на столбце, за исключением прикрепленного изображения, как мне правильно отделить
    Anonymous » » в форуме CSS
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»