بدأت مؤخرًا العمل على مشروع شخصي حيث أرغب في إنشاء تطبيق لا يعتمد على السحابة - أي يمكن نشره على أي مزود سحابي مع الحد الأدنى من التغييرات في التعليمات البرمجية أو بدون تغييرات. الشرط الأساسي هو فصل منطق الأعمال عن المنطق الخاص بموفر السحابة.
في هذا المنشور، أريد أن أشارك النهج الذي تم اتباعه.
الرمز أدناه يستخدم لغة بايثون
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)
لا تتردد في التعليق بأي اقتراحات أو تعليقات.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3