Table of Contents

আধুনিক সফ্টওয়্যারগুলোর দক্ষতায় কাজ করার জন্য লেম্বারের হৃদয়ে বসে থাকা, দলকে স্বচ্ছতা ও নিয়ন্ত্রণের সঙ্গে জটিল ব্যাবসার প্রক্রিয়া শুরু করতে সাহায্য করার সুযোগ করে ।

লারাভেলের কনটেক্সটে নির্মাতার নকশা বোঝা

নির্মাণ কাজের নকশা হল গঠনবিদ্যার নকশা, যা এর চূড়ান্ত প্রতিনিধিত্ব থেকে একটা জটিল বস্তুর নির্মাণকে পৃথক করে ।

কাজের ধারার প্রেক্ষাপটে, "ম্লক্স বস্তু" হচ্ছে একটি পদক্ষেপ (কাজের মাধ্যমে কাজ করা)। একটি বিল্ডার ব্যবহার করে আপনি বিভিন্ন ধরনের কার্য প্রণালীর বর্ণনা করতে পারেন, অপসারণ, অথবা পদক্ষেপ গ্রহণ করতে পারেন। এই পদ্ধতিটি ব্যবহার করে মূল ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে কাজ করা, এবং এ রকম বিভিন্ন কাজের জন্য প্রস্তুত করা। এই পদ্ধতি সহজে যাচাই করা সম্ভব। এই পদ্ধতিতে লারার পদ্ধতিকে ব্যবহার করা এবং এর ফলে বিভিন্ন অংশের মধ্যে দিয়ে তৈরি করা সম্ভব হয়। এই পদ্ধতিটি বিভিন্ন ধরনের উন্নতির জন্য, এবং এ রকম বিভিন্ন ধরনের উন্নতির অনুসন্ধানের জন্য প্রস্তুত করা হয়।

কি সুবিধা আছে:

  • [[[F] Read][FLT][FLT]:], সমষ্টিিং পদ্ধতি কাজের ০০০ এর মত।
  • [[[F][F][FLT][F][F]]: নির্মাণ কাজের ফলের উদ্দেশ্য স্থানান্তর করা সম্ভব হয় অথবা কোনো পার্শ্ববর্তী গতি ছাড়াই সঞ্চালিত হয় ।
  • [[[F] পরীক্ষা [F] [FLT]:] [FLT]:] ধাপ এবং নির্মাণ নির্মাতাকে বিচ্ছিন্ন অবস্থায় পরীক্ষা করা যাবে ।

detফ্লো সিস্টেমের অংশ

একটা পরিষ্কার নকশার জন্য একটা মৌলিক মৌলিক ধূমপায়ী দরকার: কাজের ধারা, এক ধাপ এগিয়ে যাওয়া এবং একজন নির্মাতা জানেন যে কীভাবে একটা কর্মিলয় বৃদ্ধি পেতে হয় ।

কাজেরফ্লো ক্লাস ডিকম্প্রেস করা হচ্ছে

ওয়ার্কফ্লো ক্লাসটি একটি পদক্ষেপের একটি তালিকা তৈরি করেছে এবং সেগুলো পরিচালনার একটি পদ্ধতি সরবরাহ করেছে। প্রতিটি পদক্ষেপের নির্দিষ্ট শর্তগুলো বিবেচনা করা উচিত নয়- শুধুমাত্র একটি নির্দিষ্ট চুক্তি বাস্তবায়ন করা।

<?php

namespace App\Workflow;

class Workflow
{
 protected array $steps = [];

 public function addStep(Step $step): self
 {
 $this->steps[] = $step;
 return $this;
 }

 public function run(): void
 {
 foreach ($this->steps as $step) {
 $step->execute();
 }
 }

 public function getSteps(): array
 {
 return $this->steps;
 }
}

এই সাধারণ প্রয়োগটি এই ধারনাটি দেখাতে যথেষ্ট । প্রকৃত লারাভেলের একটি অ্যাপ্লিকেশন হিসেবে আপনি হয়তো একটি [FFL] বা [FLT] ওয়ার্ক-FOL [FLT] বা [FLT] রকাশ্যতে একটি সীমা] পাবেন, কিন্তু সেগুলো ছাড়া, বিন্যাসটি কঠিন ।

ধাপের ইন্টারফেস নির্মাণ করা হচ্ছে

কাজের ধারা অনুযায়ী যে - পদক্ষেপগুলো অংশগ্রহণ করে, তাতে একটা সাধারণ ইন্টারফেস প্রয়োগ করতে হবে ।

<?php

namespace App\Workflow;

interface Step
{
 public function execute(): void;
}

আপনি এই ইন্টারফেসকে সময়ের মধ্যে প্রসারিত করতে পারেন। উদাহরণস্বরূপ, [FLT[FLT] অথবা[FLT] CLAYY [6:] halfectives & roice এবং ট্রানস্যাকশন এর মত overs - উভয় ক্ষেত্রে কার্যকর ।

বরফের চলাচল

নীচে দুটি সাধারণ পদক্ষেপের উদাহরণ দেয়া হলো: একটি ইমেইল এবং প্রক্রিয়াকে সাজানো এবং প্রসেসিং তথ্য পাঠানো।

<?php

namespace App\Workflow\Steps;

use App\Workflow\Step;
use Illuminate\Support\Facades\Mail;

class EmailStep implements Step
{
 public function __construct(
 private readonly string $recipient,
 private readonly string $subject = 'Workflow Notification',
 private readonly string $body = ''
 ) {}

 public function execute(): void
 {
 Mail::raw($this->body, function ($message) {
 $message->to($this->recipient)
 ->subject($this->subject);
 });
 }
}

class DataProcessingStep implements Step
{
 public function __construct(
 private readonly array $data
 ) {}

 public function execute(): void
 {
 // Transform, validate, or persist $this->data
 // For demo: log the data
 \Log::info('Processing data', $this->data);
 }
}

ছোট ছোট এবং মনোযোগ দিয়ে আপনি বিভিন্ন কাজের ফলে পুনরায় নিজেকে নতুন করে আবিষ্কার করতে পারেন ।

নির্মাতাকে প্রভাবিত করা

বিল্ডার ক্লাস একটি ওয়ার্কফ্লো অবজেক্ট নির্মাণের জন্য একটি চমৎকার ইন্টারফেস সরবরাহ করে ।

<?php

namespace App\Workflow;

class WorkflowBuilder
{
 protected Workflow $workflow;

 public function __construct()
 {
 $this->workflow = new Workflow();
 }

 public function addEmailStep(string $recipient, string $subject = 'Notification', string $body = ''): self
 {
 $this->workflow->addStep(
 new Steps\EmailStep($recipient, $subject, $body)
 );
 return $this;
 }

 public function addDataProcessingStep(array $data): self
 {
 $this->workflow->addStep(
 new Steps\DataProcessingStep($data)
 );
 return $this;
 }

 public function build(): Workflow
 {
 return $this->workflow;
 }
}

ফ্লুমিটার ইন্টারফেস এবং চািং

এই চমৎকার ইন্টারফেস হচ্ছে লারাভেলে নির্মাণবিদের বিন্যাস উজ্জ্বল করা।

$workflow = (new WorkflowBuilder())
 ->addEmailStep('[email protected]', 'Welcome', 'Your account is ready.')
 ->addDataProcessingStep(['user_id' => 42, 'action' => 'register'])
 ->build();

$workflow->run();

এই পড়ার ফলে জ্ঞানকে হ্রাস করে এবং ব্যবসায়িক নিয়মাবলী পরিবর্তন হলে পদক্ষেপ নেওয়া সহজ হয় ।

উচ্চ পর্যায়ের কর্ম সংক্রান্ত বৈশিষ্ট্য

একটা উৎপাদনশীল কাজের রোবার প্রক্রিয়াকে পরিমাপ করার জন্য সাইডবারের মতো করে সঞ্চালন করা প্রয়োজন ।

কন্ডিশনাল ধাপ দ্বারা অবচিত অনুক্রমের ব্যবহার

সকল ধাপকে প্রতিবার চালানো উচিত নয় । ধাপের ধাপের গতি বৃদ্ধি করে [FLT:LOL] পদ্ধতি দ্বারা, আপনি গোরস্থান ডাটা ভিত্তিক সিদ্ধান্ত নিতে পারেন ।

interface Step
{
 public function shouldExecute(Context $context): bool;
 public function execute(): void;
}

class ConditionalEmailStep implements Step
{
 public function shouldExecute(Context $context): bool
 {
 return $context->get('send_email') === true;
 }

 public function execute(): void
 {
 // send email...
 }
}

[ ১২: ১৩] কাজ করার জন্য কর্মিলের [FLT] পদ্ধতি এরপর সেটা চালানোর আগে প্রতিটা ধাপ পরীক্ষা করে দেখা হবে ।

ফাইল লোড করতে সমস্যা: %s

একটি ধাপ ব্যর্থ হলে, পূর্ববর্তী ধাপ প্রত্যাবর্তন করতে ইচ্ছুক হলে (উদাহরণস্বরূপ, eFODO) sol/ 4:LODOPLY:LOPL [FL]: [FL]] prop:]

interface Step
{
 public function execute(): void;
 public function rollback(): void;
}

কর্ম প্রবাহ তখন একটি ট্রানসাকশন ব্যবস্থাপক হয়ে ওঠে:

public function run(): void
{
 $completed = [];
 try {
 foreach ($this->steps as $step) {
 $step->execute();
 $completed[] = $step;
 }
 } catch (\Throwable $e) {
 // Rollback in reverse order
 foreach (array_reverse($completed) as $completedStep) {
 $completedStep->rollback();
 }
 throw $e;
 }
}

এই বিন্যাসটা বহুভাষী কাজের জন্য বিশেষভাবে মূল্যবান, যা তথ্য অনুশীলন করার ক্ষেত্রে, যেমন আর্থিক লেনদেন অথবা উদ্ভাবনমূলক রদবদল ।

কাজের ধারা

দীর্ঘ সময় ধরে চলা কাজ রোবার্রমে (যেমন, ব্যবহারকারীদের অনুমোদন চেইন) তাদের মধ্যে সম্পর্ক বজায় রাখতে হবে। লারাভির এলওনোলির এলওনোওনোআরএমকে এই বিষয়টি পরিষ্কার করে।

একটি[[FLT] মডেল তৈরি করুন যা ধাপের (প) তালিকা এবং বর্তমান মৃত্যুদণ্ডের তালিকা ব্যবহার করে একটি :

Schema::create('workflows', function (Blueprint $table) {
 $table->id();
 $table->text('steps'); // serialized array of Step objects
 $table->unsignedSmallInteger('current_step')->default(0);
 $table->string('status'); // pending, running, completed, failed
 $table->timestamps();
});

যখন পুনরায় পুনরায় চালু করা হয়, তখন কর্মিল পদার্থের মূল বস্তু সংরক্ষণ করা ধারাবাহিক পদক্ষেপ থেকে পুনরায় পুনরায় নির্মাণ করা হয় (অথবা এই ধাপকে আবার নির্মাণ কাজ করার জন্য প্রস্তুত করা যাবে)।

লারাভেলের ইকোসিস্টেমের সঙ্গে সহযোগিতা

AsyncOhus metris এর জন্য ইয়োবকে ব্যবহার করা হচ্ছে

(যেমন, বড় রিপোর্ট) ব্যাকগ্রাউন্ডে চালানোর জন্য প্রতিটি ধাপকে লারার চাকরিতে রূপান্তর করা উচিত ।

class DispatchJobStep implements Step
{
 public function __construct(
 private readonly object $job
 ) {}

 public function execute(): void
 {
 dispatch($this->job);
 }
}

// Usage in builder
public function addReportGenerationJobStep(int $userId): self
{
 $this->workflow->addStep(
 new DispatchJobStep(new GenerateReportJob($userId))
 );
 return $this;
}

সম্প্রচারের প্রণালীর প্রগতি

রিয়েল্‌টারের আপডেটগুলো লারাভেলের অনুষ্ঠান সম্প্রচারকে ব্যবহার করতে পারে ।

public function execute(): void
{
 StepStarted::dispatch($this);
 // perform work
 StepCompleted::dispatch($this);
}

ফল স্বরূপ, কম্পিউটারের মাধ্যমে ওয়েবস্কেট ( লারাভেল ইকো) দিয়ে সম্প্রচার করা যায়।

প্রকৃত বিশ্ব চিত্র

  • [[[F] > LAN[FLT][FLT]:] অ্যাকাউন্ট ALL/CLIENTLELE বার্তা ALL- তছন্নতভাবে একটি গুরুতর পাপ গোপন স্থানে প্রেরণ করুন। CLAYONECTECTECTECTECTECT CLLE
  • [[F] [FLT] ওয়ার্ক- রি-ফ্লোরম্ভের মধ্যে কর্ম [FLT]: পরীক্ষা করুন CLAYON CLAYO CLAYO ND SABLE SABLEST আপডেটের সুনির্দিষ্ট বিবরণের জন্য সরবরাহের প্রক্রিয়া আরম্ভ করা হয়েছে।
  • [[[F] [F]] স্ব স্বরাস্ট্র সম্পন্ন কর্ম [FLT]:: খসড়া ঘোষণা করে অনুমোদন/ প্রকাশ/ প্রকাশ/ প্রকাশ/ রিগ্রেশনে অনুমোদন করো প্রতি: প্রতি: CLAYOVERECT/ report/ reportly অপেকiationse

প্রত্যেক ক্ষেত্রে, বিল্ডার প্যাটার্ন বিভিন্ন বিভাগকে নির্দিষ্ট করে নির্ধারণ করতে দেয় যে, মৃতপ্রায় হত্যা ইঞ্জিনকে স্পর্শ না করেই তাদের নিজস্ব কাজের ধারা নির্ধারণ করতে হবে।

কাজেরফ্লো পরীক্ষা করা হচ্ছে

প্রত্যেক ধাপের পরীক্ষা করা যেতে পারে স্বাধীনভাবে পরীক্ষা করা যায় ।

public function test_email_step_is_added_to_workflow()
{
 $builder = new WorkflowBuilder();
 $workflow = $builder
 ->addEmailStep('[email protected]')
 ->build();

 $steps = $workflow->getSteps();
 $this->assertCount(1, $steps);
 $this->assertInstanceOf(EmailStep::class, $steps[0]);
}

অন্তর্ভুক্ত

বিল্ডার বিন্যাসটি হচ্ছে লারাভেলের নমনীয় কর্ম প্রণালী তৈরীর জন্য স্বাভাবিক । এটি পাঠযোগ্য, কনফিগার করা, এবং বিশ্বাসযোগ্য কোড তৈরী করে। অন্যদিকে উচ্চমানের ইন্টারফেস মিররে লারাভেল নির্মাতারা যে গ্লুকাইলকে পছন্দ করেছে, তা ইতোমধ্যে সরাসরি মৃত্যুদণ্ড প্রদান করা হয়েছে। শর্ত অনুসারে, আপনি এমন পদ্ধতি তৈরি করতে পারেন যা প্রাকৃতিকভাবে জটিল, জটিল এবং জটিল এক পদ্ধতি তৈরি করে।

আপনার বোধগম্যতাকে গভীর করার জন্য, লারাভেলের সরকারি নথিপত্র [FFR][FL] [FL] এবং[FL][FOL][FL] [FLT], এবং [FL][FLT] শ্রমের জন্য অতিরিক্ত বিন্যাস বিবেচনা করুন [FL] [FL] [FL]:L] [FL] [FD [F]:L]:[F]