Я работаю над некоторым кодом для организации нашего определения событий / отображения категорий. Наша цель - иметь возможность определять «имена событий», а также ассоциировать категории, это в значительной степени статичный процесс. Мы хотим, чтобы люди использовали константы, а не кучу строк везде. Нам также нужно где-то проверять события / категории, а также выполнять некоторые операции поиска, такие как получение событий по категориям и наоборот.
class EventMapping(object)
def __init__(self, name, categories):
self.name = name
self.categories= categories
EventRegistry.register(self)
def __eq__(self, obj):
if(isinstance(obj, str)):
return obj==self.name
if(isinstance(obj, EventMapping)):
return obj.name ==self.name
and obj.categories==self.categories
return False
def __repr__(self):
return self.name
class Event():
class MyCompontent():
ComponentEvent = EventMapping("ComponentEvent", None)
ComponentEventWCategory = EventMapping("ComponentEvent"
, [Category.MyComponent.Useful])
class Data():
Created =EventMapping("Created", [Category.Data.All, Category.Data.Count]
Updated= EventMapping("Updated", [Category.Data.All]
Deleted= EventMapping("Deleted", [Category.Data.All, Category.Data.Count]
class Category():
class MyComponent():
Useful = "Useful"
class Data():
All= "All"
Count= "Count"
class EventRegistry():
@staticmethod
def register( eventMapping):
eventName= eventMapping.name
#store locally...
@staticmethod
def events(category):
#retreive events by category
@staticmethod
def category(event_name):
#retreive categories by event name
Есть пара вещей, которые мне не нравятся:
В классе EventRegistry я сохраняю их дважды, один раз в ключе словаря событий, являющемся именем, и оцениваю список категорий. Второй - это словарь противоположной категории, снабженный именем категории и списком событий. Есть ли лучший способ добиться этого? Мне нужен простой способ поиска по имени или категории.
Должен ли я просто создать два реестра? Один для категорий один для событий?
Когда речь идет об использовании событий, мы делаем это следующим образом:
self.subscribe(Event.MyComponent.Useful)
self.subscribe(Category.MyComponent.Useful)
затем мы используем реестр для проверки существования события, а также для доставки сообщения. Есть ли более простой способ получить пакет, такой как пространства имен?
Просто ищу отзывы о лучших способах сделать это или шаблон для подражания. Я искал вокруг и не могу ничего найти. Даже если вы знаете какой-то модуль, на который я могу взглянуть и лучше понять, как сделать это лучше, я тоже буду рад рассмотреть это.