В чем разница между адаптером и шаблоном репозитория?

avatar
Smith
8 августа 2021 в 23:43
640
1
0

Я новичок в этом "шаблоне", поэтому я создал репозиторий, который поможет мне использовать и тестировать API в python. Затем я показал его другу, который сказал, что это не шаблон репозитория, а адаптер. Поскольку он старше и лучше меня, я не могу возражать, и я понятия не имею, в чем разница между ними.

Итак, вот код (я им очень горжусь)

# imports
from repository.utils import factory_getter
from typing import Union

# return objects containing lists of animes
class Animes(object):
    # get anime list for a given days of the week
    def get_day_schedule(self, day: str):
        return factory_getter("schedule", day)

    # return a object containing a list of animes airing in the current day
    def get_today_schedule(self):
        return factory_getter("schedule")

    # get anime list for a given year and season
    def get_early_season(self, season: Union[str, int], year: Union[str, int]):
        return factory_getter("season", str(season), str(year))

    # get animes airing in the current season
    def get_current_season(self):
        return factory_getter("season")

    # get animes that have been announced for the upcoming seasons
    def get_later_season(self):
        return factory_getter("season", "later")

    # get the best rated animes of the season
    def get_top_airing(self, page: Union[str, int] = 1):
        return factory_getter("top", "anime", str(page), "airing")

    # get the best rated movies
    def get_top_movies(self, page: Union[str, int] = 1):
        return factory_getter("top", "anime", str(page), "airing")

    # get animes of a certain genre
    def get_genre(self, genre, page: Union[str, int] = 1):
        return factory_getter("genre", "anime", str(genre), str(page))

Вот оно.
Я также был бы очень признателен, если бы вы могли направить меня к некоторому учебному материалу. Спасибо

Источник
jaco0646
9 августа 2021 в 14:06
0

Как вы думаете, какой шаблон репозитория представлен в этом примере и почему?

Ответы (1)

avatar
Mustehssun Iqbal
21 августа 2021 в 02:05
0

Шаблон адаптера используется в том случае, когда у вас есть старая реализация и новая реализация для одной и той же вещи, но их интерфейсы разные, т. е. две реализации не взаимозаменяемы, но концептуально они делают одно и то же. . Возможно, в новой реализации потребуется повторно использовать большую часть старой реализации. Если мы заменим старую реализацию новой, это вызовет критические изменения. Итак, что мы делаем, так это извлекаем интерфейс старой реализации. И используйте этот интерфейс везде, где использовался старый импл, пока мы пишем свой собственный импл этого «Адаптера». Импл адаптера может повторно использовать старый импл и обеспечивать его новое поведение, но теперь он соответствует общему интерфейсу.

Репозиторий — это совсем другое. Он используется для инкапсуляции всех доступов к сущностям и дао. Какое отношение адаптер имеет к репозиторию? Есть конкретный случай?

Возможно, потребуется написать адаптер для репозитория, придав ему дополнительную функциональность, но при этом повторно используя его старые методы — это очень полезно для данных Spring, где имплы имеют стандартное поведение с использованием динамических прокси. Ну, я не знаю, какой именно у вас случай. Но надеюсь, это поможет.

Mustehssun Iqbal
21 августа 2021 в 02:10
0

Мы используем шаблон адаптера, чтобы включить сегрегацию интерфейса, предоставляя при этом собственные реализации репозиториев и по-прежнему используя поддержку динамического прокси-сервера данных Spring. Мы не можем просто расширить или реализовать CrudRepository, иначе нам пришлось бы определить 10 20 методов, и тогда данные Spring были бы для нас невыгодны. Вот почему мы используем шаблон адаптера.