1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import pickle
from abc import ABC, abstractmethod
class DAO(ABC):
@abstractmethod
def __init__(self, datasource=''):
self.__datasource = 'data/' + datasource
self.__cache = {} #é aqui que vai ficar a lista que estava no controlador. Nesse exemplo estamos usando um dicionario
try:
self.__load()
except FileNotFoundError:
self.__dump()
def __dump(self):
pickle.dump(self.__cache, open(self.__datasource, 'wb'))
def __load(self):
self.__cache = pickle.load(open(self.__datasource,'rb'))
#esse método precisa chamar o self.__dump()
def add(self, key, obj):
self.__cache[key] = obj
self.__dump()
#cuidado: esse update só funciona se o objeto com essa chave já existe
def update(self, key, obj):
try:
if(self.__cache[key] != None):
self.__cache[key] = obj #atualiza a entrada
self.__dump() #atualiza o arquivo
except KeyError:
pass # implementar aqui o tratamento da exceção
def get(self, key):
try:
return self.__cache[key]
except KeyError:
pass #implementar aqui o tratamento da exceção
# esse método precisa chamar o self.__dump()
def remove(self, key):
try:
self.__cache.pop(key)
self.__dump() #atualiza o arquivo depois de remover um objeto
except KeyError:
pass #implementar aqui o tratamento da exceção
def get_all(self):
self.__load()
return self.__cache.values()