<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های drefir</title>
        <link>https://virgool.io/feed/@saeedrnjbr</link>
        <description>سعی می‌کند به نحوه‌ی پیاده‌سازی و همچنین بررسی تخصصی‌ترین مطالب حوزه فناوری اطلاعات بپردازد .</description>
        <language>fa</language>
        <pubDate>2026-06-16 19:14:18</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/69148/avatar/oLLZuu.png?height=120&amp;width=120</url>
            <title>drefir</title>
            <link>https://virgool.io/@saeedrnjbr</link>
        </image>

                    <item>
                <title>الگوی Abstract Factory</title>
                <link>https://virgool.io/@saeedrnjbr/%D8%A7%D9%84%DA%AF%D9%88%DB%8C-abstract-factory-au1ozvwvp3tn</link>
                <description>برای فهم بهتر Abstract Factory شما نیاز دارید تا درک درستی از دلیل پیدایش این الگو ها و همچنین مزایای استفاده از آنها داشته باشید.شما می‌توانید با مراجعه به بخش اول (الگوهای طراحی نرم افزار - Design Patterns)،  پیشنیاز این آموزش را مطالعه نمایید.هدف (Intent)Abstract Factory یکی از الگوهای خلاقانه (Creational)، که امکان ایجاد خانواده‌ای از Object ها، با ویژگی مشترک را به شما می‌دهد.بیان مسئلهفرض کنید شما یک نرم افزار فروش میز و صندلی برای یک شرکت طراحی کردید. مشتریان دائم به دنبال محصولات جدید و مدل های متفاوت هستند و از طرفی شرکت های ارایه دهنده این نوع محصولات، به دنبال به روز کردن کاتالوگ مطابق با نیاز مشتری می باشند. شما باید ساختار کد را به شکلی طراحی کنید، که به ازای ارائه مدل های متفاوت هر محصول، نیازی به تغییرات بنیادی در سیستم نباشید. ? راه حلدر این الگو یک Interface مسئول ایجاد خانواده ای از Object ها، بدون نیاز به اشاره مستقیم به کلاس آنها می باشد.این الگو به شما پیشنهاد می‌کند که یک Interface از Object های اصلی (distinct) ایجاد کنید. سپس دیگر Object های هم خانواده را از این رابط بسازید.بعد از این مرحله به یک کلاس abstract با نام Abstract Factory نیازمندیم که شامل توابع مختلفی برای ایجاد Object ها و هم خانواده های آن می‌باشد.تمام توابع در کلاس Abstract Factory باید به صورت abstract تعریف شوند.در قدم دوم یک کلاس Abstract ایجاد کنید که شامل توابع ساخت هر محصول باشد.و در پایان شما به ازای هر محصول یک کلاس Factory نیاز دارید تا محصولات متنوع را بسازید.ساختاریمثال کاربردی در Abstract Factoryدر مثال زیر ما قصد داریم علاوه بر ایجاد اشکال مختلف،  از هر شکل مدل های متفاوتی نیز ایجاد کنیم. ? ابتدا Interface متناسب با  Object های اصلی را ایجاد می‌کنیم. تا بوسیله آن بتوانیم هم خانواده های آن را نیز تولید کنیم.interface Shape
{
    public function draw();
}interface RoundedShape
{
    public function draw();
}بعد از ایجاد Interface نیاز داریم تا  Object های مختلف را طبق با آن یسازیم.class Rectangle implements Shape
{
    public function draw(){
        echo &amp;quotRectangle&amp;quot
    }
}class RoundedRectangle implements RoundedShape
{
    public function draw()
    {
        echo &amp;quotRoundedRectangle&amp;quot
    }
}class Square implements Shape
{
    public function draw(){
        echo &amp;quotSquare&amp;quot
    }
}class RoundedSquare implements RoundedShape
{
    public function draw()
    {
        echo &amp;quotRoundedSquare&amp;quot
    }
}حالا یک کلاس Abstract Factory ایجاد می‌کنیم و توابع مورد نیاز برای ایجاد Object را به آن اضافه می‌کنیم.abstract class AbstractFactory
{
    abstract function getShape();
    abstract function getRoundedShape();
}در این مرحله نیاز است تا کلاس Factory برای ایجاد  Object‌های یک خانواده را ایجاد کنیم.class RectangleFactory extends AbstractFactory
{
    public function getShape()
    {
        return new Rectangle();
    }

    public function getRoundedShape()
    {
       return new RoundedRectangle();
    }
}class SquareFactory extends AbstractFactory
{
    public function getShape()
    {
        return new Square();
    }

    public function getRoundedShape()
    {
        return new RoundedSquare();
    }
}در پایان از ساختاری که ایجاد کردیم در کلاینت خود (بخشی که الگو از آن استفاده می‌کند) استفاده می کنیم.function client(AbstractFactory $abstractFactory){
    $getShape = $abstractFactory-&gt;getShape();
    $getRoundedShape = $abstractFactory-&gt;getRoundedShape();
    $getShape-&gt;draw();
    $getRoundedShape-&gt;draw();
}


client(new RectangleFactory());
// Rectangle
// RoundedRectangle
client(new SquareFactory());
// Square
// RoundedSquareمزایاشما را از ایجاد Object هایی با ویژگی یکسان مطمئن می‌کند.از ایجاد وابستگی (coupling) بین کلاس سازنده Object و کلاینت جلوگیری می‌کند.شما می‌توانید کد ایجاد Object را در یک ماژول جدا قرار دهید و در تمام پروژه از آن استفاده کنید.به عبارتی دیگر اصل قابل نگهداری بودن (Maintainable) نرم افزار را نیز رعایت کنید.شما می‌توانید Object های مختلفی بدون تغییر در ساختار اصلی کد ایجاد کنید.معایبممکن است پیچیدگی زیادی در پیاده سازی کد ایجاد شود ، زیرا شما نیاز دارید به ازای هر Object یک  کلاس Factory  و Interface بسازید.</description>
                <category>drefir</category>
                <author>drefir</author>
                <pubDate>Sun, 15 Sep 2019 21:30:05 +0430</pubDate>
            </item>
                    <item>
                <title>الگوی Factory Method</title>
                <link>https://virgool.io/@saeedrnjbr/%D8%A7%D9%84%DA%AF%D9%88%DB%8C-factory-method-nuqrpyv8shee</link>
                <description>برای فهم بهتر Factory Method شما نیاز دارید تا درک درستی از دلیل پیدایش این الگو‌ها و همچنین مزایای استفاده از آنها داشته باشید.شما می‌توانید با مراجعه به بخش اول (الگوهای طراحی نرم افزار - Design Patterns)،  پیشنیاز این آموزش را مطالعه نمایید.هدف(Intent)Factory Method یکی از الگوهای خلاقانه (Creational)، در واقع یکی از پرکاربرد‌ترین مدل‌های نرم افزاری می‌باشد که برای ایجاد Object‌ های مختلف از آن استفاده می‌کنند.بیان مسئلهفرض کنید ما یک نرم افزار کودک برای رسم اشیا تولید و در نسخه اول ما فقط با شکل دایره شروع کردیم. با خوش اقبالی شما ، این نرم افزار مورد اسقبال واقع می‌شود  و تصمیم به گسترش آن می‌گیرید.برای این کار نیازمند به افزودن اشکال مختلف مانند مربع و مثلث هستیم. تا کودکان بتوانند شکلهای مختلفی را ترسیم کنند.چون نرم افزار بر پایه یک کلاس Circle بنا شده است با مشکل مواجه می‌شویم و برای افزودن کلاس Square باید تغییرات در ساختار نرم افزار ایجاد کنیم.همین موضوع باعث ایجاد وابستگی و همچنین بهم ریختگی ساختار نرم افزار می‌شود.راه حلاین الگو به شما پیشنهاد می‌‌دهد تا به جای ایجاد مستقیم Object ها ، آنها را در داخل یک تابع factory method ایجاد کنید.در واقع کدی که از این factory method استفاده می‌کند(کلاینت)، تفاوت بین Object های ایجاد شده را نمی‌فهمد و فقط از ویژگی مشترک بین آنها استفاده می‌کند.این الگو یک Interface به نام Product در اختیار کلاس سازنده (Creator) قرار می‌دهد و کلاس سازنده توسط آن می‌تواند Object ایجاد کند.همچنین به زیر کلاسهایی (SubClasses) که از کلاس سازنده استفاده می‌کنند، امکان ایجاد تغییر در Object خروجی را می‌دهد.Product یک Interface است که  Object هایی که توسط کلاس سازنده و زیر کلاس ها ایجاد می‌شوند. از ویژگی های آن  استفاده می‌کنند و بین همه آن مشترک است.متدی که در کلاس سازنده،  امکان ایجاد Object های مختلف به زیرکلاس ها را می‌دهد Factory Method  نام دارد.ساختارمثال کاربردی در Factory Method ? طبق تعریف الگو ما نیاز داریم تا یک Interface به نام Shape برای کلاس سازنده ایجاد کنیم.interface Shape
{
    public function draw();
}حالا باید تمام Object هایی که از این ویژگی مشترک استفاده می‌کنند را ایجاد کنیم.class Square implements Shape
{
    public function draw()
    {
        echo &amp;quotSquare Shape&amp;quot
    }
}class Circle implements Shape
{
    public function draw()
    {
        echo &amp;quotCircle Shape&amp;quot
    }
}class Rectangle implements Shape
{
    public function draw()
    {
        echo &amp;quotRectangle Shape&amp;quot
    }
}حالا یک کلاس Factory (کلاس سازنده) نیاز داریم.این کلاس شامل یک تابع factory می‌باشد تا زیر کلاسی هایی که از آن استفاده می‌کند، بتوانند Object دلخواه خود را ایجاد کنند.abstract class ShapeFactory
{
    abstract function getShape();
}در پایان ما نیاز داریم تا زیر کلاس‌ها را برای ایجاد Object بسازیم.class CircleFactory extends ShapeFactory
{
    public function getShape()
    {
        return new Circle();
    }
}class SquareFactory extends ShapeFactory
{
    public function getShape()
    {
        return new Square();
    }
}class RectangleFactory extends ShapeFactory
{
    public function getShape()
    {
       return new Rectangle();
    }
}در پایان از ساختاری که ایجاد کردیم در کد خود استفاده میکنیم.function creator(ShapeFactory $creator){
    $factoryMethod = $creator-&gt;getShape();
    $factoryMethod-&gt;draw();
}

creator(new RectangleFactory());
// Rectangle Shape
creator(new CircleFactory());
// Circle Shape
creator(new SquareFactory());
// Square Shapeمزایااز ایجاد وابستگی (coupling) بین کلاس سازنده و زیرکلاس‌ها جلوگیری می‌کند.شما می‌توانید کد ایجاد Object را در یک ماژول جدا قرار دهید و در تمام پروژه از آن استفاده کنید.    به عبارتی دیگر اصل قابل نگهداری بودن (Maintainable) نرم افزار را نیز رعایت کنید.شما می‌توانید Object‌های مختلفی بدون تغییر در ساختار اصلی کد ایجاد کنید.معایبممکن است پیچیدگی زیادی در پیاده سازی کد  ایجاد شود ، زیرا شما نیاز دارید به ازای هر Object یک زیر کلاس بسازید.http://dref.ir/factory-method-design-pattern/</description>
                <category>drefir</category>
                <author>drefir</author>
                <pubDate>Sat, 14 Sep 2019 17:22:31 +0430</pubDate>
            </item>
                    <item>
                <title>Design Patterns</title>
                <link>https://virgool.io/@saeedrnjbr/design-patterns-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-cgvss5bh8puc</link>
                <description>Design Patterns الگوهایی برای طراحی یک نرم افزار‌ توسعه پذیر (Scalable) و قابل نگهداری (Maintainable) می‌باشند.Scalabilityنرم افزار به گونه‌ای طراحی شده باشد که به راحتی قابل گسترش و توسعه در آینده باشد.Maintainableمیزان قابل فهم بودن و سازگاری با یک ساختار استاندارد در توسعه نرم افزار، که امکان پشتیبانی از نرم افزار را آسان تر می‌کند.الگو (Pattern) چیست ؟الگو یک تکه کد مشخصی نیست که در برنامه کپی کنید، بلکه یک راه حل کلی برای حل مسئله ارائه می‌دهد. اغلب الگوریتم و الگو را با هم اشتباه می‌گیرند.به این دلیل که هر دو با ارائه راه حل در تلاش برای حل مسئله هستند.  الگوریتم برای حل مسئله از یک چارچوب روشن و مشخص پیروی می‌کند.اما یک الگو در Design Patterns می‌تواند دو راه حل متفاوت ، در دو مسئله مختلف داشته باشد.اجزای تشکیل دهنده الگواغلب الگو ها در Design Patterns به شکل فرمول هستند، به این معناست که هر نفر می‌تواند با الهام گرفتن از ساختار آن، یک الگوی جدید ایجاد کند. اما به طور کلی یک الگو از بخش های زیر تشکیل می‌شود:Intent بیان کننده‌ی مختصر مسئله و راه حل یک الگو.Motivationبیان کننده مسئله.Structureبیان کننده ساختار یک الگو و نحوه ارتباط بخش های مختلف.Code exampleآسان کردن فهم الگو، با استفاده در یک زبان برنامه نویسی.انواع الگوهاCreational:‌ وظیفه ساخت اشیا.Structural: چگونگی ترکیب کلاس و اشیا.Behavioral: تمرکز روی ارتباط بین اشیا.Behavioral همچنان به دو بخش زیر تقسیم می‌شود:Object Scope این بخش روابط بین اشیا در زمان اجرا (runtime) را مدیریت می‌کند.Class Scope این بخش روابط بین کلاس ها در زمان کامپایل (compile) را مدیریت می‌کند.مزایاشاید شما طی سال هایی که برنامه نویسی کرده‌اید، به روش های مختلفی بدون حتی انتخاب یک الگو،  کد برنامه را نوشته و اجرا کرده باشید.پس چرا باید برای یادگرفتن این Design Patterns زمان صرف کنید؟ دو دلیل مشخص این ابهام را برای شما رفع می‌کند.الگو ها مانند یک جعبه ابزار از راه حل های صحیح و تست شده، برای حل مسئله در طراحی نرم افزار هستند.مانند یک زبان مشترک برای ارتباط شما و هم تیمیهایتان، برای پیشبرد پروژه موثر هستند.معایبالگوها  (Design Patterns) در بعضی از مواقع نیز می‌توانند برای یک پروژه مضر هم باشند، در زیر به چند مورد از آنها اشاره می‌کنیم.راه حل های ناکارآمدانتخاب غلط یک الگو و عدم تطبیق با پروژه.استفاده غیر منطقیگاهی یک برنامه نویسی ساده می‌تواند مشکل شما را حل کند و واقعا نیاز به استفاده از این الگوها ندارید.لیست الگوها (Patterns) به تفکیک نوعAbstract:‌CFactory:‌SDecorator:‌CPrototype:‌SAdapter:‌SFacade:‌SProxy:‌SBridge:‌CFactory:‌BObserver:‌CBuilder:‌SFlyweight:‌CSingleton:‌BChainOfResponsibility:‌BInterpreter:‌BState:‌BCommand:‌BMediator:‌BTemplateMethod:‌SComposite:‌BMemento:‌BVisitor:‌Bسخن آخر و نتیجه گیریDesign Patterns به صورت پیش فرض سودمند و کاربردیست.زمانی می‌توانید راه حل درست را انتخاب کنید که به تمام الگو ها و ساختار آنها تسلط کافی داشته باشید.در پست های بعدی، تمام الگوهای فوق را با تمرکز روی جزییات و  با ذکر مثال کاربردی بررسی خواهیم داد.http://dref.ir/design-patterns-part1/</description>
                <category>drefir</category>
                <author>drefir</author>
                <pubDate>Thu, 12 Sep 2019 10:21:22 +0430</pubDate>
            </item>
                    <item>
                <title>Serverless یک زیر ساخت مدرن</title>
                <link>https://virgool.io/apieco/serverless-%DB%8C%DA%A9-%D8%B2%DB%8C%D8%B1-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%85%D8%AF%D8%B1%D9%86-jde6mx1j5gdn</link>
                <description>Serverless یکی از جدیدترین دستاورد های رو به رشد در محاسبات ابری است که شما را از داشتن سرور و دغدغه های آن راحت می‌کند.پس از تولید نرم افزار و آپلود آن روی سرور، نگهداری و مدیریت سرور همواره یکی از چالش های توسعه دهندگان بوده است.که اغلب با مشکلاتی که به چند مورد آنها در زیر اشاره شده، دست و پنجه نرم می‌کنند.پرداخت هزینه زیاد برای تامین و نگهداری سرورمشکلات بروزرسانی و توسعه سرورنگرانی برای تامین امنیت سروربرای یک سازمان کوچک و یا یک توسعه دهنده ای (developer) که به صورت فردی فعالیت می کند، این هزینه ها می‌تواند بسیار بالا و مشکل ساز باشند.سازمان های بزرگتر نیز برای رفع این مشکل نیاز به مستقر کردن یک تیم حرفه ای دارند، گرچه فرآیندهای لازم برای پشتیبانی می تواند به کندتر شدن زمان توسعه منجر شود.Serverless یک معماری برای حل برخی از این مشکلات می‌باشد که ما امروز قصد بررسی جزییات آن را داریم.Serverless Computingیک زیرساخت محاسبات ابریست که میزان منابع برای اجرای یک برنامه را به صورت داینامیک به آن اختصاص می‌دهد.Serverless Computing  یک تکه کد را می‌گیرد و با تخصیص منابع (as-used) مورد نیاز، آن را اجرا می‌کند. هزینه  در این روش متناسب با منابعی که اختصاص داده شده محاسبه می‌گردد ، این مدل سرویس دهی (FaaS (Functions as a Service نامیده می‌شود. در FaaS کد به شکل یک تابع  ارسال می‌شود و در یک stateless containers اجرا می‌شود.container این اطمینان را حاصل می‌کند که اپلیکیشن  فارغ از اینکه روی چه پلتفرمی است، کاملاً به درستی اجرا گردد به طوری که روی سیستم develop تا محیط تست،‌ سرور مجازی یا حتی کلود عملکرد یکسانی خواهد داشت.stateless containers به کانتینرهایی گفته می‌شوند که جایی برای ذخیره اطلاعات ندارند و اگر هم داشته باشند، موقت و بعد از restart از بین می‌روند.این امر به توسعه دهندگان این امکان را می‌دهد تا به اندازه ای که از منابع استفاده می‌کنند (pay-as-you-go) ، هزینه پرداخت کنند و بدون نگرانی از بابت زیر ساخت ، کد خود را اجرا کنند.توابع می‌توانند به شکل زیر باشند:Scheduler Job (دستوری که به صورت دوره ای اجرا می‌شود).درخواست HTTP Request از طرف یک مرورگر.اجرای یک Query روی دیتابیس. سرویسدهندگانیکهمعماریServerlessرادراختیارشماقرارمی‌دهند: AWS: AWS LambdaMicrosoft Azure: Azure FunctionsGoogle Cloud: Cloud FunctionsArvan Cloudمزایای استفاده از ServerLessمقرون به صرفه بودنتوسعه دهندگان هزینه‌ی اضافی بابت Idle CPU و حافظه‌ای که از آن استفاده‌ای ندارند را پرداخت نمی‌کنند.توسعه ماژول های مستقل تقسیم‌بندی کد به توابع مختلف، امکان پیاده سازی سیستم به صورت ماژولار را فراهم می‌سازد.حذف فرآیندهای پیچیده استقرار توسعه دهندگان به جای درگیر شدن برای رفع باگ یک سیستم یکپارچه و پیچیده ، صرفا یک ماژول واحد را توسعه یا Debug می‌کنند.مشکلات ServerLessسخت بودن مهاجرت از سرویس سنتی به یک سرویس مدرن تر.نگرانی سازمان‌ها از تامین امنیت سرویس.تفاوت کیفیت در ارایه سرویس بین سرویس دهندگان مختلف، امکان انتقال زیرساخت به سرویس دهنده‌ی دیگر را دشوار می‌کند.نتیجه گیری و سخن آخرما درباره مزایا و معایب ServerLess ها تا حد ممکن صحبت کردیم،  اما در نهایت این کسب و کار شماست که متناسب با نیاز نرم افزار، زیرساخت مورد نیاز را انتخاب می‌کند.http://dref.ir</description>
                <category>drefir</category>
                <author>drefir</author>
                <pubDate>Tue, 10 Sep 2019 00:17:06 +0430</pubDate>
            </item>
                    <item>
                <title>HeadLess و تفاوت‌های آن با Decoupled،Coupled</title>
                <link>https://virgool.io/@saeedrnjbr/headless-%D9%88-%D8%AA%D9%81%D8%A7%D9%88%D8%AA%D9%87%D8%A7%DB%8C-%D8%A2%D9%86-%D8%A8%D8%A7-decoupledcoupled-wnub13etyrdq</link>
                <description>سیستم‌ مدیریت محتوای Headless طی دو سال اخیر بسیار رشد کرده‌‌  و اکثر شرکت ها پیرو چنین ساختاری در راستای چابکی و انعطاف پذیری بیشتر هستند.در سوی دیگر سیستم‌های سنتی همواره به دنبال ارائه راه کار استاندارد‌تر بوده و از نظر افراد متخصص پیچیدگی کمتری دارند.اگر حس می‌کنید که زمان طراحی مجدد محصول شماست با نظر مخالفان و موافقان این سیستم ها بیشتر آشنا شوید تا بهترین راه حل برای توسعه نرم افزار خود را انتخاب کنید.معماری سیستم مدیریت محتوای سنتی (Traditional)بر خلاف Headless و Decoupled سیستم سنتی (Coupled) بخش بک‌اند را به قسمت فرانت‌اند پیوند می‌زند و این دو در هم تنیده شده اند.در واقع بک‌اند تمام محتوایات نرم افزار را ایجاد،مدیریت و ذخیره می‌کند و بازدیدکنندگان توسط یک فرانت‌اند می توانند اطلاعات را مشاهده نمایند. نمونه سیستم هایی که میتوان به آنها اشاره کرد عبارتند از Wordpress ،  Drupal و غیره .یک سیستم سنتی شامل بخش های زیر می باشد:‌یک پایگاه داده جهت ذخیره سازی اطلاعاتیک بخش بک‌اند جهت ایجاد ، ذخیره و خواندن اطلاعاتیک فرانت‌اند جهت نمایش اطلاعات به کاربران و بازدیدکنندگان ? سیستم مدیریت محتوای Decoupledبک‌اند و  فرانت‌اند از یکدیگر مجزا هستند.یکی برای ذخیره و ایجاد اطلاعات و دیگری وظیفه نمایش اطلاعات به کانال های مختلف (Channels) را به عهده دارد. در واقع بک‌اند می تواند روی یک سرور مستقل، اطلاعات را توسط یک API در اختیار فرانت‌اند قرار دهد.(کانال ها همان وب سایت،اپلیکشین موبایل و یا هر ابزار دیگری می‌باشند)در نظر داشته باشید که بک‌اند و فرانت‌اند می‌تواند در خود یک ساختار مستقل(Independently) برای پیاده سازی داشته باشند. برای مثال React یک فریمورک جاوا اسکریپت با ساختار ماژولار و حداقل وابستگی بین کامپوننت های مختلف UI می باشد.یک سیستم Decoupled شامل بخش های زیر می باشد:‌یک پایگاه داده جهت ذخیره سازی اطلاعاتیک بخش بک‌اند جهت ایجاد ، ذخیره و خواندن اطلاعاتیک API جهت اتصال بک‌اند و فرانت‌اندیک فرانت‌اند جهت نمایش اطلاعات به کانال های مختلفسیستم مدیریت محتوای Headlessاین سیستم زیر مجموعه ای از یک Decoupled می باشد به طوریکه  هر دو دارای یک بک‌اند برای ذخیره و ایجاد اطلاعات هستند و  اطلاعات را در اختیار API قرار می‌دهد.تنها وجه تمایز این دو لایه نمایش آنها (Presentation Layer) می باشد،Headless ها بر خلاف Decoupled ها فاقد فرانت‌اند جهت نمایش اطلاعات است.API only, UI anythingمی توان گفت که Headless تنها یک مخزن داده است که توسط یک API میتواند اطلاعات را طور مستقیم در اختیار کانال های مختلف (Channels) قرار دهد.یک سیستم Headless شامل بخش های زیر می باشد:‌یک پایگاه داده جهت ذخیره سازی اطلاعاتیک بخش بک‌اند جهت ایجاد ، ذخیره و خواندن اطلاعاتیک API جهت اتصال بک‌اند به کانال های مختلفامکان اتصال به فرانت‌اندهای مختلفامکان شخصی سازی قالب ? مزایا و معایب سیستم های HeadLess , Decoupled ، Traditionalسیستم مدیریت محتوای سنتی (Traditional)سیستم های سنتی پیشنهاد مناسبی برای یک سایت شخصی،بلاگ و یا یک وب سایت کوچک سازمان هستند.معایب هر اندازه که پیچیدگی پروژه بیشتر شود، پیوستگی بک‌ و فرانت‌ نیز افزایش پیدا میکند.در نتیجه توسعه دهندگان با محدودیت مواجه شده و سازمان عدم چابک بودن خود را بیشتر احساس می‌کند به طوری که هزینه زیادی را برای نگهداری و توسعه به سازمان تحمیل می‌کند.سیستم های Decoupledنمایش سریعتر اطلاعاتانعطاف پذیری بالاتر در مقابل تغییراتامنیت بالااستقرار آسانادغام آسان تعییرات در طول توسعه با بخش های دیگر در سیستممعایباما یک Decoupled پیچیده تر از یک سیستم سنتی است ، در نتیجه نیاز به زمان توسعه بیشتری دارد.سیستم های Headlessزیر مجموعه‌ای از Decoupled ها می‌باشد در نتیجه شامل تمام مزایا این سرویس نیز هست. اما مهمترین تمایز آن نداشتن فرانت‌اند در ساختار خود می‌باشد که باعث انعطاف پذیری بالای برای ارتباط با کانال ها و فرانت‌اند های مختلف می‌شود.معایب فاقد Interface جهت نمایش اطلاعات و  همچنین پیچیدگی بیشتر نسبت به دو نوع دیگرنتیجه گیری  و سخن آخرهر سیستم مدیریت محتوا شامل معایب و مزایایست که متناسب با زیرساخت آن می‌تواند مفید باشد. در این بخش ما صرفا به تجزیه و تحلیل جوانب مثبت و منفی سه معماری پرداختیم اما در انتها کسب و کار شما می‌تواند متناسب با محیط و شرایط معماری مناسب را انتخاب کند.http://dref.ir</description>
                <category>drefir</category>
                <author>drefir</author>
                <pubDate>Sun, 08 Sep 2019 16:29:43 +0430</pubDate>
            </item>
                    <item>
                <title>Nginx Unit ، یک سرور و چند زبان</title>
                <link>https://virgool.io/@saeedrnjbr/nginx-unit-%DB%8C%DA%A9-%D8%B3%D8%B1%D9%88%D8%B1-%D9%88-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86-pqh5o2awkbc2</link>
                <description>Nginx Unit یکی از مجموعه محصولات Nginx. یک سرور open source  و سبک که قابلیت اجرای چندین زبان  در یک سرور را دارد. این سرور به طوری فراگیر شده است که تا امروز 409 میلیون سایت بر رو آن راه اندازی شده اند. این سرور برای اجرای اپلیکیشن های مختلف stand‑alone و distributed (توزیع شده) و میکروسرویس ها قابل استفاده می‌باشد.ویژگی هاقابلیت به روز رسانی داینامیک تنظیمات با RESTful JSON APIپشتیبانی چندین زبان مختلف یک سرورقابلیت اجرای نسخه های مختلف یک زبان در کنارپشتیبانی از SSL/TLSپشتیبانی request routing به طور گستردهاجرای سرور WebSocket داخلی برای Node.jsزبان های قابل پشتیبانی در NGINX UnitPythonPHPGoPerlRuby(JavaScript (Node.jsJavaدر NGINX Unit  درخواست هایی که برای هر برنامه ارسال می‌شود توسط یک router تفکیک می‌شوند. این سرور هیچ فایل ثابتی برای تنظیمات ندارد، همه پروژه ها توسط سرویس REST تنظیم می‌شوند.بخش router به طور مداوم در حال پردازش است و هیچ وقت restart نمی‌شود. همین موضوع قابلیت تغییر تنظیمات سرور به صورت یکپارچه،  بدون نیاز به قطع کردن سرویس (interrupting) را می‌دهد.در NGINX Unit هر اپلیکیشن در چارچوب کاری (sandbox) خود توسعه و اجرا می‌شود.دلیل امکان اجرای چندین زبان در NGINX Unit به طور همزمان ، جداکننده Router Process می‌باشد که درخواست های HTTP را از بخش پردازش برنامه ها (Application Processes) جدا می‌کند. NginxUnitیکیازمجموعهمحصولاتNginx.یکسرورopensourceوسبککهقابلیتاجرایچندینزباندریکسروررادارد.اینسروربهطوریفراگیرشدهاستکهتاامروز409میلیونسایتبرروآنراهاندازیشدهاند.اینسروربرایاجرایاپلیکیشنهایمختلفstand‑aloneوdistributed(توزیعشده)ومیکروسرویسهاقابلاستفادهمی‌باشد.آموزشوراهاندازی این سرویس به صورت open-source در اختیار شما قرار گرفته است . شما می توانید به مراجعه به سایت installation instructions مراحل نصب این سرویس را مشاهده کنید و از آن بهره مند شوید.http://dref.ir</description>
                <category>drefir</category>
                <author>drefir</author>
                <pubDate>Sun, 08 Sep 2019 16:23:29 +0430</pubDate>
            </item>
            </channel>
</rss>