«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Разработка облачно-независимого приложения

Разработка облачно-независимого приложения

Опубликовано 6 ноября 2024 г.
Просматривать:954

Developing cloud agnostic application

Введение

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

В этом посте я хочу поделиться подходом, которого придерживались.

  • Создайте интерфейс с абстрактными методами для выполнения операций в облаке.
  • Создайте классы, специфичные для облачного провайдера, которые являются подклассами этого интерфейса и обеспечивают реализацию абстрактных методов.
  • Создайте отдельный класс/метод, который будет возвращать реализацию облачного провайдера на основе некоторого условия. Заводской шаблон
  • Вызывающий класс будет использовать объект из вышеуказанного класса/метода и вызывать его методы.

Код

В коде ниже используется Python

Интерфейс с абстрактными методами

from abc import ABC, abstractmethod

class IObjectStorage(ABC):

    @abstractmethod
    def upload_object_to_bucket(self, file_name, file_content):
        _raise an error that method is not implemented_

Создать реализацию для конкретного поставщика облачных услуг

class AWSObjectStorageConnector(IObjectStorage):

    def __init__(self, bucket_name):
       _Initialize a s3 client using boto3 and initialize a variable using bucket name_

    def upload_object_to_bucket(self, file_name, file_content):
        _Implement the logic to upload the file to AWS S3 bucket_

Создайте метод для получения объекта класса реализации конкретного облачного провайдера — Фабричный метод

Этот метод принимает переменную поставщика облака, которая будет передана из вызывающего метода

def get_object_storage(cloud_provider, bucket_name) -> IObjectStorage:

    if cloud_provider == 'aws':
        return AWSObjectStorageConnector(bucket_name=bucket_name)
    else:
        raise ValueError(f'Unsupported cloud provider: {cloud_provider}')

Вызовите фабричный метод, чтобы получить экземпляр объекта.

Переменная cloud_provider будет считываться из переменной среды, переданной в качестве входных данных. Это гарантирует, что одна и та же логика будет работать нормально с разными поставщиками облачных услуг.

object_storage_connector = get_object_storage(cloud_provider=provider, bucket_name=bucket_name)

Пожалуйста, не стесняйтесь оставлять комментарии с любыми предложениями и отзывами.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/grkashyap/developing-cloud-agnostic-application-part-1-4ff8?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3