master #12
|
@ -44,7 +44,7 @@ OK ! Now we can start the invoice class.
|
|||
This class will calculate the final price for a customer.
|
||||
|
||||
```python
|
||||
class Invoice:
|
||||
class Invoice(object):
|
||||
def __init__(self, book, quantity, discountRate, taxRate, total):
|
||||
self.book = book
|
||||
self.quantity = quantity
|
||||
|
@ -111,7 +111,7 @@ With these three classes, we respect the first principle of **SOLID**.
|
|||
### Open-Closed Principle
|
||||
|
||||
This principle says that classes are open for extension and closed to modification.
|
||||
Extension mean news functionality and modification mean modifying your code.
|
||||
Extension mean news functionalities and modification mean modifying your code.
|
||||
If you want to add new functionalities, you are able to add it without manipulating the existing program.
|
||||
If you touch the existing code, you have a risk to have news bugs.
|
||||
So, if you want to add something else, you can use abstract classes and help of interface.
|
||||
|
@ -131,4 +131,36 @@ class InvoicePersistence(object):
|
|||
```
|
||||
The _saveToDataBase_ method is used to save information in a Data Base.
|
||||
We have modified the _InvoicePersistence_ class.
|
||||
This class will be more difficult to make easily extendable.
|
||||
And this class will be more difficult to make easily extendable.
|
||||
So, we violate the **OCP** convention.
|
||||
If you want to respect this principle, you have to create a new class.
|
||||
|
||||
```python
|
||||
class InvoicePersistence(abc.ABC):
|
||||
@abstractmethod
|
||||
def save(self, invoice):
|
||||
pass
|
||||
```
|
||||
The new _InvoicePersistence_ class has an abstract method.
|
||||
So, if a class inherits the _InvoicePersistence_ class, you have to implement the _save_ method.
|
||||
|
||||
And for example, we will create a _DataBasePersistence_ class, and this class inherit the abstract _InvoicePersistence_ class.
|
||||
```python
|
||||
class DatabasePersistence(InvoicePersistence):
|
||||
def __init__(self, invoice):
|
||||
self.invoice = invoice
|
||||
self.save(self.invoice)
|
||||
|
||||
def save(self, invoice):
|
||||
print("Save in database ...")
|
||||
```
|
||||
Let's make the same thing with _FilePersistence_ class.
|
||||
```python
|
||||
class FilePersistence(InvoicePersistence):
|
||||
def __init__(self, invoice):
|
||||
self.invoice = invoice
|
||||
self.save(self.invoice)
|
||||
|
||||
def save(self, invoice):
|
||||
print("Save to file ...")
|
||||
```
|
||||
|
|
Loading…
Reference in New Issue