Python Forum
Single Responsibilty Principle
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Single Responsibilty Principle
#2
I would say Register would actually be Person
Register would contain Person's
Email would be Emailer it would not be an subclass of Register
Display would not be a subclass of Register
Tyr to separate things as much as possible so they do their own thing.

My Rock, Paper, Scissors is an example of separating responsibility
https://python-forum.io/Thread-Another-R...r-Scissors
A lot of the code could be reused to make a GUI version


Here is a possible example of your code above, each class has its own responsibility to do something.
classes can be changed without affecting the other classes.

class Person:
    def __init__(self, first_name, last_name, email_address):
        self.first_name = first_name
        self.last_name = last_name
        self.email_address = email_address

    @property
    def fullname(self):
        return f'{self.first_name} {self.last_name}'


class Register:
    def __init__(self, people_dict=None):
        self.people_dict = people_dict or {}

    def add_person(self, person):
        self.people_dict[person.fullname] = person


class Emailer:
    def __init__(self):
        # code that sets up enabling the sending of emails
        pass

    def send_mail(self, email_address, subject, text):
        # code that sends the email
        return f'Email {subject} sent to {email_address}'


class Display:
    def __init__(self):
        print(f'{self.__class__.__name__} initiaited')

    def output(self, text):
        print(text)


class ReverseDisplay(Display):

    def output(self, text):
        print(text[::-1])


class Controller:
    def __init__(self, register=None, emailer=None, display=None):
        self.register = register or Register()
        self.emailer = emailer or Emailer()
        self.display = display or Display()

    def add_person(self, person):
        self.register.add_person(person)
        self.display.output(f'{person.fullname} added to register')

    def email_everyone(self, subject, text):
        self.display.output('sending eveyone an mail')
        for key, person in self.register.people_dict.items():
            result = self.emailer.send_mail(
                person.email_address, subject, text)
            self.display.output(result)


controller = Controller()
person1 = Person('John', 'Doe', '[email protected]')
person2 = Person('Joe', 'Bloggs', '[email protected]')
controller.add_person(person1)
controller.add_person(person2)
controller.email_everyone('Alert!', 'You have been alerted')
controller.display = ReverseDisplay()
person3 = Person('Mac', 'Dee', '[email protected]')
controller.add_person(person3)
controller.email_everyone('Alert!', 'You have been alerted')
Output:
Display initiaited John Doe added to register Joe Bloggs added to register sending eveyone an mail Email Alert! sent to [email protected] Email Alert! sent to [email protected] ReverseDisplay initiaited retsiger ot dedda eeD caM liam na enoyeve gnidnes moc.niamod@eodnhoj ot tnes !trelA liamE moc.niamod@sggolbeoj ot tnes !trelA liamE moc.niamod@eedcam ot tnes !trelA liamE
Reply


Messages In This Thread
Single Responsibilty Principle - by menator01 - Jun-28-2020, 01:55 PM
RE: Single Responsibilty Principle - by Yoriz - Jun-28-2020, 02:22 PM
RE: Single Responsibilty Principle - by ndc85430 - Jun-28-2020, 05:32 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020