با یک تیر دو نشان بزنید🎯 یک هدیه ۳ میلیون تومانی به همراه ۲۵٪ تخفیف روی همه دوره‌های متخصص😍
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ gity ghasemi
ساخت اینستنس از کلاس اصلی
جامعه مهندسی نرم افزار ایجاد شده در ۲۸ بهمن ۱۴۰۰

سلام و وقت بخیر و خسته نباشید.

اول از همه عذر خواهی کنم بابت سوالی که میپرسم چون خیلی کم درگیر کلاسا بودم ممکنه سطح پایین باشه سوالم. و اینکه حواسم به کانسپت هم هست اما تو کد زدن این سوالا برام پیش اومد.

  • ما اومدیم تو کانستراکتور کلاس اصلی پارامتر پرایوت تعریف کردیم. پس زمان صدا زدن باید حتما فکتوری کلاسو بهش پاس بدیم. بهتر نبود از همون حالت پرایوت استفاده کنیم که از بیرون درگیر پاس دادن فکتوری کلاس نشیم؟
  • مورد دوم هم مربوط به همین کلاسه که تو srp هم داشتیم. که از متغیر پرایوت نیو نکردیم. اگر ما بیایم و کلاس اصلی رو صدا بزنیم متغیر encoderFactory که از نوع کلاس EncoderFactory هست چون مقداردهی اولیه نشده و نیو نشده خطای آندیفایند احتملا بده. از روش دوم استفاده کنیم بهتر نیست؟ یا دلیل خاصی داشته و ربط داره به اون قوانینی که نقض میکنه سالید رو؟
export default class AClass {
    // b is undefinde?
    private b:BClass
    b.folanMethod()
}
export default class AClass {
    let b=new BClass()
    b.folanMethod()
}

سلام خدمت شما. اینکه آبجکت‌ها رو سازنده‌های کلاس ارسال می‌کنیم میخوایم مطمئن بشیم حتما حتما اون آیجکت به دست این کلاس میرسه و عملا کلاس وارد یک invalid state نمیشه (همون خطای undefined) چون تا زمانی که اون آبجکت به سازنده ارسال نشه اون آبجکت کلاس اصلی ساخته نمیشه.در کدهایی که ارسال کردین هم این مشهوده که private b:BClass حتما مقداردهی شده و زمان استفاده ازش هیچ خطایی برای undefined نمیده. اگر نیاز به توضیحات بیشتر هست حتما ذکر کنید.

بهترین پاسخ
کیوان علی محمدی ۲۸ بهمن ۱۴۰۰، ۱۰:۰۳