যেহেতু আমি প্রোগ্রামিং দিয়ে আমার যাত্রা শুরু করেছি, আমি একটি আকর্ষণীয় প্যাটার্ন লক্ষ্য করেছি: বেশিরভাগ অ্যাপ্লিকেশন টেমপ্লেট করা হয়। হ্যাঁ, এটা বিশুদ্ধ সত্য! এই নিবন্ধের শুরুতে, এখানেই থামুন এবং আপনার তৈরি করা সমস্ত প্রকল্পের কথা ভাবতে শুরু করুন।
তাদের সবার মাঝে মিল কি? আপনি যদি ঘনিষ্ঠভাবে তাকান, আপনি দেখতে পাবেন যে অনেকগুলি মূল কার্যকারিতা বিভিন্ন প্রকল্পে পুনরায় ব্যবহার করা হয়েছে। এই মূল কার্যকারিতাগুলিতে প্রায়শই ব্যবহারকারীর প্রমাণীকরণ, অর্থপ্রদান প্রক্রিয়াকরণ, ব্যবহারকারী ব্যবস্থাপনা এবং আরও অনেক কিছু অন্তর্ভুক্ত থাকে।
এই নিবন্ধে, আমি এই পয়েন্টটি উত্থাপন করতে চাই যে এই সমস্ত নিদর্শনগুলি ইতিমধ্যেই অতীতের প্রোগ্রামারদের দ্বারা তৈরি করা হয়েছিল। সত্যিই, আমরা এখন ব্যবহার করছি প্রায় সবকিছু, ইতিমধ্যেই বাস্তবায়িত হয়েছে। আমরা নির্দিষ্ট প্রকল্পের উপর ভিত্তি করে কিছু কার্যকারিতা পরিবর্তন করি।
আমি আপনাকে পাইথনে ব্যাকএন্ড বিকাশের দৃষ্টিকোণ থেকে উদাহরণগুলির সাথে পরিচয় করিয়ে দেব, তবে এটি যেকোন প্রোগ্রামিং ভাষা বা সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের ক্ষেত্রের ক্ষেত্রে প্রয়োগ করা যেতে পারে।
তাই, সব ব্যাকএন্ড অ্যাপ্লিকেশনের কি মিল আছে? একবার দেখা যাক!
দ্রষ্টব্য : আপনি যদি OOP (অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং) এর সাথে পরিচিত হন তবে আপনার টেমপ্লেট করা মডিউলগুলিকে বিমূর্ততার সর্বোচ্চ স্তর হিসাবে বিবেচনা করুন তবে অ্যাপ্লিকেশন স্তরে যাতে এটি এই নীতি অনুসারে লেখা উচিত।
আমি প্রতিটি পরবর্তী বিভাগকে মৌলিক উপাদানগুলিতে ভেঙে দিতে চাই, যা প্রায় যেকোনো ব্যাকএন্ড অ্যাপ্লিকেশনে প্রয়োগ করা যেতে পারে।
মৌলিক উপাদান
2.1 ব্যবহারকারী মডেল
আমরা User
সবচেয়ে সাধারণ শ্রেণীকে এমন বৈশিষ্ট্য দিয়ে সংজ্ঞায়িত করছি যা কোনো নির্দিষ্ট ব্যবহারকারীর জন্য প্রয়োগ করা যেতে পারে।
from werkzeug.security import generate_password_hash, check_password_hash class User: def __init__(self, username, password, email): self.username = username self.password_hash = generate_password_hash(password) self.email = email self.roles = [] def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password)
2.2 টোকেন ব্যবস্থাপনা
টোকেন-ভিত্তিক প্রমাণীকরণের জন্য JWT ব্যবহার করা সাইবার নিরাপত্তা এবং ব্যাকএন্ড বিকাশের সর্বোত্তম অনুশীলনের ক্ষেত্রে একটি ভাল পছন্দ।
def generate_token(user): payload = { 'username': user.username, 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1) } return jwt.encode(payload, SECRET_KEY, algorithm='HS256') def verify_token(token): try: payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256']) return payload['username'] except jwt.ExpiredSignatureError: return None except jwt.InvalidTokenError: return None
2.3 ডেকোরেটর
from functools import wraps from flask import request, jsonify, session def is_authenticated(func): @wraps(func) def decorated_function(*args, **kwargs): if 'user' not in session: return jsonify({"error": "User not authenticated"}), 401 return func(*args, **kwargs) return decorated_function
def roles_required(*roles): def decorator(func): @wraps(func) def decorated_function(*args, **kwargs): user_roles = session.get('roles', []) if not any(role in user_roles for role in roles): return jsonify({"error": "User does not have the required role"}), 403 return func(*args, **kwargs) return decorated_function return decorator
এবং মূলত, এটাই! আপনি সমস্ত প্রকল্প জুড়ে প্রমাণীকরণের জন্য এই পূর্বনির্ধারিত কার্যকারিতা ব্যবহার করতে পারেন!
প্রায় কোনো অ্যাপ্লিকেশন আর্থিক লেনদেন পরিচালনা করে। এটি একটি স্থানীয় কসাইয়ের দোকান হোক বা একটি বড় এন্টারপ্রাইজ জায়ান্ট, আপনাকে অর্থপ্রদান সংগ্রহের জন্য একটি কার্যকর সিস্টেম ব্যবহার করতে হবে।
মৌলিক উপাদান
Stripe
বা PayPal
মতো পেমেন্ট গেটওয়ের সাথে সংযোগ করা
3.1 পেমেন্ট গেটওয়ে ইন্টিগ্রেশন
এটি স্ট্রাইপের জন্য একটি সুনির্দিষ্ট বাস্তবায়ন সহ বিভিন্ন পেমেন্ট গেটওয়ে একীভূত করার জন্য একটি ভিত্তি হিসাবে ব্যবহার করা যেতে পারে। সাধারনত, আমার ব্যক্তিগত পছন্দ হল পেমেন্টের জন্য StripeAPI
ব্যবহার করা কারণ এটি বাজারে দীর্ঘদিন ধরে রয়েছে এবং যেকোন প্রজেক্টে একীভূত করা সহজ।
class PaymentGateway(ABC): @abstractmethod def create_payment_intent(self, amount, currency='gbp'): pass @abstractmethod def confirm_payment(self, payment_id): pass @abstractmethod def handle_webhook(self, payload, sig_header): pass
পেমেন্ট গেটওয়ের জন্য এটি সবচেয়ে সাধারণ উদাহরণ, এবং আপনি আপনার প্রয়োজন অনুযায়ী নির্দিষ্ট বাস্তবায়নের উপর ফোকাস করতে পারেন।
3.2 পেমেন্ট মডেল
অর্থপ্রদানের তথ্য সঞ্চয় করার জন্য মডেল সংজ্ঞায়িত করুন। এই উদাহরণটি ORM-এর সাথে ব্যবহারের জন্য অভিযোজিত হতে পারে। প্রয়োজনে আপনি ক্লাসের আরও জটিল শ্রেণিবিন্যাস তৈরি করতে পারেন, কিন্তু এই উদাহরণের জন্য, নিম্নলিখিত স্নিপেটটি যথেষ্ট যথেষ্ট হওয়া উচিত।
class Payment: def __init__(self, user_id, amount, currency): self.id = uuid.uuid4() self.user_id = user_id self.amount = amount self.currency = currency self.status = status payments = []
ডাটাবেসে সমস্ত অর্থপ্রদান সংরক্ষণ করুন এবং 3.3 বিভাগের জন্য লেনদেন প্রক্রিয়াকরণের জন্য একটি Celery
টাস্ক সেট আপ করুন৷ ডাটাবেস রেকর্ড নিম্নলিখিত মত হওয়া উচিত:
id | user_id | amount | currency | status --------------------------------------+-----------------------------------+--------+----------+---------- e532d653-7c8b-453a-8cd4-3ab956863d72 | 1ff9efb3-d5e8-4e53-854f-4246ba9ff638 | 100.00 | USD | Failed 35985d41-5d54-4021-bed6-82d7233cc353 | a0984002-bace-478e-b6f9-6e4459e1b5ba | 250.50 | EUR | Pending 1ff9efb3-d5e8-4e53-854f-4246ba9ff638 | 9f896874-dc43-4592-8289-d0f7f8b8583a | 99.99 | GBP | Completed
এখন, আমরা একটি জটিল সিস্টেম তৈরি করেছি যা যেকোনো প্রকল্পে একত্রিত করা যেতে পারে। আপনি এখনও প্যাটার্ন অনুসরণ করছেন? এটি সর্বত্র ব্যবহার করা যেতে পারে!
সর্বোপরি, আপনি এই ডেটার ভিজ্যুয়ালাইজেশনের জন্য অন্য একটি অ্যাপ্লিকেশন সংজ্ঞায়িত করতে পারেন। আপনি টেমপ্লেটিং সম্পর্কে বিন্দু পেয়েছেন! 😉
ইমেল এবং বিজ্ঞপ্তিগুলি ব্যবহারকারীদেরকে অবগত রাখে এবং আপনার অ্যাপের জীবনে নিযুক্ত রাখে। এটি অ্যাকাউন্ট যাচাইকরণ, পাসওয়ার্ড রিসেট বা বিপণন যোগাযোগের জন্যই হোক না কেন, যে কোনো ধরনের প্রকল্পের জন্য একটি নির্ভরযোগ্য ইমেল পরিষেবা অপরিহার্য।
SendGrid
বা Amazon SES
এর মতো ইমেল পরিষেবাগুলির সাথে সংযোগ করা।
4.1 ইমেল পরিষেবা ইন্টিগ্রেশন
EmailService
ক্লাসের মধ্যে ইমেল পাঠানোর জন্য SendGrid
এর প্রধান যুক্তি সংজ্ঞায়িত করুন।
import sendgrid from sendgrid.helpers.mail import Mail class EmailService: def __init__(self, api_key): self.sg = sendgrid.SendGridAPIClient(api_key) def send_email(self, from_email, to_email, subject, html_content): email = Mail( from_email=from_email, to_emails=to_email, subject=subject, html_content=html_content ) try: response = self.sg.send(email) return response.status_code except Exception as e: return str(e)
পেমেন্ট গেটওয়ের মতো, আপনাকে বাজারে কোনো নির্দিষ্ট ইউটিলস বা পণ্যগুলিতে ফোকাস করতে হবে না। এটি যেকোন প্রকল্পের জন্য কীভাবে সাধারণীকরণ এবং টেমপ্লেট করা যায় তার একটি উদাহরণ মাত্র।
4.2 ইমেল টেমপ্লেট
এই ধরনের সিস্টেমের জন্য আমার প্রিয় প্যাটার্ন হ্যান্ডলার প্যাটার্ন; আপনি শুধু একটি ইমেলের ধরন হিসাবে অভিধানে আরও এবং আরও কী যোগ করুন এবং একটি বিষয়বস্তু সহ ফাইলের পথ।
email_templates = { 'welcome': “welcome.html”, 'reset_password': "<h1>Reset Your Password</h1><p>Click <a href='{link}'>here</a> to reset your password.</p>" }
অন্যথায়, একই উদ্দেশ্যে একটি Enum
সংজ্ঞায়িত করা চমৎকার হতে পারে।
4.3 ইমেল পাঠানো
আমরা যাদু ঘটতে একটি ফাংশন প্রয়োজন! চলুন নিম্নলিখিত লিখুন:
def send_email(email_service, from_email, to_email, subject, template_name, **template_vars): """ Send an email using the specified email service. """ html_content = get_email_template(template_name, **template_vars) return email_service.send_email(from_email, to_email, subject, html_content)
আরেকটি গুরুত্বপূর্ণ বিষয় হল সমস্ত ব্যাকএন্ড প্রজেক্টে বেশ কিছু ফাইল যোগ করা, যেমন README
.env
config.py
, pyproject.toml,
.pre-commit.yml
এবং প্রজেক্টের ভিতরে থাকা ফাইলগুলির ভিত্তি কাঠামো নিয়ে আসা।
যদিও প্রস্তাবিত কাঠামোটি পাইথন বাস্তবায়নের জন্য কিছুটা শক্ত করা হয়েছে, যেমনটি আমি আগে উল্লেখ করেছি, আপনি অন্য কোনও ভাষা বা ক্ষেত্রের জন্য একই কাজ করতে পারেন।
এটি লক্ষ করাও গুরুত্বপূর্ণ যে বিমূর্ততার সর্বোচ্চ স্তরে টেমপ্লেট করা এবং অ্যাপ্লিকেশনটির একটি ভাল কাঠামো বজায় রাখা হতে পারে
প্যাকেজ বা মাইক্রোসার্ভিস আর্কিটেকচারের সংযোজন হিসাবে অন্যান্য প্রকল্পের জন্য পুনরায় ব্যবহার করা হয়।
সবকিছু টেমপ্লেট করা যেতে পারে!
এখানে প্রদত্ত উদাহরণগুলি কেবলমাত্র শুরু — এই প্যাটার্নগুলিকে প্রসারিত এবং পরিমার্জিত করা যেতে পারে যাতে আপনার প্রকল্পগুলি বিকশিত হয়৷ আপনি caching
ইনস্টল k8s
, docker
, Devops
পরিকাঠামো, CI/CD
এবং পাইপলাইন যোগ করতে পারেন।
একটি সহজ বিবৃতি মনে রাখবেন: একবার আপনি আপনার কাজটি সঠিকভাবে সম্পন্ন করার পরে, আপনি একই কাজটি অন্যটি সম্পন্ন করার সময় ব্যবহার করতে পারেন।
লক্ষ্য হল প্রকল্প, অবকাঠামো, উপাদান এবং পরিষেবাগুলিকে বিভিন্ন অ্যাপ্লিকেশন জুড়ে পুনরায় ব্যবহারযোগ্য করে তোলা!
নিজেকে এক কাপ চা তৈরি করুন, এবং আপনার অ্যাপ্লিকেশনগুলির কোন অংশগুলি বিভিন্ন অ্যাপে পুনরায় ব্যবহার করা যেতে পারে সে সম্পর্কে চিন্তা করুন। অনুরূপ পরিষেবা তৈরি করার চেষ্টা করুন এবং শুধুমাত্র কিছু কোড টুকরো সামঞ্জস্য করে আপনার কাজ স্বয়ংক্রিয় করুন!
পড়ার জন্য ধন্যবাদ, এবং খুশি টেমপ্লেটিং!