برنامه نویسی

کد بوی 271 – اصل هالیوود

Summarize this content to 400 words in Persian Lang
با ما تماس نگیرید، ما با شما تماس خواهیم گرفت

TL;DR: اصل هالیوود، اتصال شل را با کنترل معکوس ترویج می کند. اجزای سطح بالا تصمیم می گیرند که چه زمانی و چگونه از اجزای سطح پایین استفاده کنند.

کوپلینگ محکم

تمدید مشکل است
کاهش انعطاف پذیری
افزایش پیچیدگی
نقض اصول SOLID
عدم آزمون پذیری

وارونگی کنترل را اعمال کنید
از تزریق وابستگی استفاده کنید
به انتزاعات بستگی دارد

اصل هالیوود یک اصل طراحی نرم افزاری است که بر اتصال آزاد بین اجزا تاکید دارد.

اجزای سطح بالا نباید کنترل مستقیم جریان اجرا در اجزای سطح پایین.

مؤلفه های سطح پایین باید خود را با مؤلفه های سطح بالا ثبت کنند و مؤلفه های سطح بالا باید تصمیم بگیرند چه زمانی و چگونه برای استفاده از آنها

این نیز به عنوان شناخته شده است وارونگی کنترل.

اشتباه است

class TicketCart {
private paymentMethod: PaymentMethod;

constructor(paymentMethodType: string) {
// TicketCart is tightly coupled
// to specific payment method classes
// like CreditCardProcessor and CryptoService.
if (paymentMethodType === ‘creditCard’) {
this.paymentMethod = new CreditCardProcessor();
} else if (paymentMethodType === ‘Crypto’) {
this.paymentMethod = new CryptoService();
} else {
throw new Error(‘Invalid payment method’);
}
}

checkout(money: Money): void {
this.paymentMethod.pay(money);
}
}

const cart = new TicketCart(‘creditCard’);
const money = new Money(126, ‘USD’);
cart.checkout(money);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

درسته

interface PaymentMethod {
pay(total: Money): void;
}

class TicketCart {
private paymentMethod: PaymentMethod;

constructor(paymentMethod: PaymentMethod) {
// This solution is more open and less coupled
// because it relies on abstractions
this.paymentMethod = paymentMethod;
}

checkout(total: Money): void {
this.paymentMethod.pay(total);
}
}

class CreditCardProcessor implements PaymentMethod {
pay(total: Money): void {
console.log(`Processing payment of ${total.Amount()}
${total.currency()} using credit card.`);
}
}

const creditCardProcessor = new CreditCardProcessor();
const cart = new TicketCart(creditCardProcessor);
const total = new Money(126, ‘USD’);
cart.checkout(total);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

[X] دستی

این بوی طراحی است

[X ] متوسط

مولدهای هوش مصنوعی گاهی اوقات می‌توانند کدی را ایجاد کنند که اصل هالیوود را نقض می‌کند، اگر به صراحت به آنها دستور ندهید که وارونگی الگوهای کنترل را دنبال کنند.

آنها اغلب به صورت پیش‌فرض کد مستقیم و محکمی را تولید می‌کنند.

ابزارهای هوش مصنوعی می توانند به طور موثر نقض اصل هالیوود را با تجزیه و تحلیل وابستگی های کد و شناسایی اتصالات محکم با دستورالعمل های مناسب تشخیص دهند. (پایین را ببینید).

آنها را امتحان کنید!

به یاد داشته باشید: دستیاران هوش مصنوعی اشتباهات زیادی مرتکب می شوند

این اصل می تواند کیفیت کد شما را بهبود بخشد، پیچیدگی را کاهش دهد و آزمایش پذیری را افزایش دهد.

ویکی پدیا

ویکیواژه

کد بوی نظر من است.

“تزریق وابستگی اساساً در مورد انتقال وابستگی ها به اشیا است، نه اینکه اشیا آنها را ایجاد یا پیدا کنند.”

مارتین فاولر

این مقاله بخشی از سری CodeSmell است.

با ما تماس نگیرید، ما با شما تماس خواهیم گرفت

TL;DR: اصل هالیوود، اتصال شل را با کنترل معکوس ترویج می کند. اجزای سطح بالا تصمیم می گیرند که چه زمانی و چگونه از اجزای سطح پایین استفاده کنند.

  • کوپلینگ محکم
  • تمدید مشکل است
  • کاهش انعطاف پذیری
  • افزایش پیچیدگی
  • نقض اصول SOLID
  • عدم آزمون پذیری
  1. وارونگی کنترل را اعمال کنید
  2. از تزریق وابستگی استفاده کنید
  3. به انتزاعات بستگی دارد

اصل هالیوود یک اصل طراحی نرم افزاری است که بر اتصال آزاد بین اجزا تاکید دارد.

اجزای سطح بالا نباید کنترل مستقیم جریان اجرا در اجزای سطح پایین.

مؤلفه های سطح پایین باید خود را با مؤلفه های سطح بالا ثبت کنند و مؤلفه های سطح بالا باید تصمیم بگیرند چه زمانی و چگونه برای استفاده از آنها

این نیز به عنوان شناخته شده است وارونگی کنترل.

اشتباه است

class TicketCart {
    private paymentMethod: PaymentMethod;

    constructor(paymentMethodType: string) {
        // TicketCart is tightly coupled
        // to specific payment method classes 
        // like CreditCardProcessor and CryptoService.  
        if (paymentMethodType === 'creditCard') {
            this.paymentMethod = new CreditCardProcessor();
        } else if (paymentMethodType === 'Crypto') {
            this.paymentMethod = new CryptoService();
        } else {
            throw new Error('Invalid payment method');
        }
    }

    checkout(money: Money): void {
        this.paymentMethod.pay(money);
    }
}

const cart = new TicketCart('creditCard');
const money = new Money(126, 'USD');
cart.checkout(money);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

درسته

interface PaymentMethod {
    pay(total: Money): void;
}

class TicketCart {
    private paymentMethod: PaymentMethod;

    constructor(paymentMethod: PaymentMethod) {
        // This solution is more open and less coupled
        // because it relies on abstractions
        this.paymentMethod = paymentMethod;
    }

    checkout(total: Money): void {
        this.paymentMethod.pay(total);
    }
}

class CreditCardProcessor implements PaymentMethod {
    pay(total: Money): void {
        console.log(`Processing payment of ${total.Amount()} 
        ${total.currency()} using credit card.`);
    }
}

const creditCardProcessor = new CreditCardProcessor();
const cart = new TicketCart(creditCardProcessor);
const total = new Money(126, 'USD');
cart.checkout(total);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

[X] دستی

این بوی طراحی است

[X ] متوسط

مولدهای هوش مصنوعی گاهی اوقات می‌توانند کدی را ایجاد کنند که اصل هالیوود را نقض می‌کند، اگر به صراحت به آنها دستور ندهید که وارونگی الگوهای کنترل را دنبال کنند.

آنها اغلب به صورت پیش‌فرض کد مستقیم و محکمی را تولید می‌کنند.

ابزارهای هوش مصنوعی می توانند به طور موثر نقض اصل هالیوود را با تجزیه و تحلیل وابستگی های کد و شناسایی اتصالات محکم با دستورالعمل های مناسب تشخیص دهند. (پایین را ببینید).

آنها را امتحان کنید!

به یاد داشته باشید: دستیاران هوش مصنوعی اشتباهات زیادی مرتکب می شوند

این اصل می تواند کیفیت کد شما را بهبود بخشد، پیچیدگی را کاهش دهد و آزمایش پذیری را افزایش دهد.

ویکی پدیا

ویکیواژه

کد بوی نظر من است.


“تزریق وابستگی اساساً در مورد انتقال وابستگی ها به اشیا است، نه اینکه اشیا آنها را ایجاد یا پیدا کنند.”

مارتین فاولر


این مقاله بخشی از سری CodeSmell است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا