آشنایی با معماری استریم (Stream Architecture) در دات نت
این ویدئو بخشی از آموزش فصل سیزدهم از دوره ستارگان سی شارپ می باشد .
در این ویدئو به نحوه استفاده و کار با Stream ها به منظور خواندن و نوشتن داده ها بر روی کتابخانه io در سی شارپ می پردازیم. ابتدا بررسی می کنیم که Stream چیست و معماری Stream در Net. به چه صورت است. سپس در مورد کلاس Stream، متد ها و بخش های مختلف آن یاد خواهیم گرفت. در مرحله بعد با Backing Store Streams ها آشنا شده و Backing Store Streams های مختلف در . Netو نحوه استفاده از آن ها را بررسی می کنیم. در آخر با مورد های مختلف Decorator Streams و Stream Adapters و نحوه استفاده از آن ها کدنویسی آشنا خواهیم شد.
Stream چیست؟
به عبارتی Stream در سی شارپ مانند جریان یک رودخانه است که از مبدا آغاز شده و به مقصدی دیگر جاری خواهد شد. در برنامه نویسی نیز ما یک input data داریم که داده ها را از یک منبع دریافت کرده و آن ها را وارد اپلیکیشن می کند و پردازش های لازم روی آن ها انجام می شود؛ نتیجه نهایی به خروجی ارسال خواهد شد. نکته این جاست که این داده ها به صورت یکجا داخل اپلیکیشن بارگذاری نخواهند شد و این جریان هر بار صرفا یک مقداری از دیتا را وارد اپلیکیشن می کند. در مرحله بعد پردازش مورد نظر انجام شده و خروجی نهایی برای کاربر نمایش داده می شود.
دلایل استفاده از Stream در سی شارپ و اپلیکیشن ها
استفاده از Stream در اپلیکیشن ها کاربرد های زیادی دارد. یکی از این کاربردها مربوط به زمانی است که می خواهید فایلی حجیم را در اپلیکیشن load کرده و از آن استفاده کنید. لازم نیست که به منظور پردازش بر روی فایل کل آن را بر روی اپلیکیشن load کنید. به طور مثال زمانی که شما بخواهید یک اپلیکیشن بنویسید که قرار است روی یک گوشی موبایل با یک گیگ رم اجرا شود؛ اگر آن اپلکیشن یک ویدیو پلیر باشد، ممکن است کاربر داده هایی با حجم 10 گیگ را در این اپلیکیشن اجرا کند. با توجه به سخت افزار گوشی امکان لود این داده ها وجود ندارد. در این مرحله Stream ها کار خود را شروع کرده و هر بار تنها بخشی از داده را لود می کنند و این کار تا زمانی ادامه خواهد یافت که داده به طور کامل بارگذاری شوند.
از دیگر کاربرد های معماری Stream در سی شارپ می توان به زمانی اشاره کرد که می خواهیم فایلی را از شبکه دریافت کنیم. لازم نیست که به داخل شبکه رفته و منتظر دانلود کامل فایل بمانیم تا روی آن پردازش انجام دهیم. کافی است فایل را به صورت تکه تکه مانند جریانی از داده ها دریافت کرده و پردازش مورد نظر را روی آن انجام دهیم.
معماری Stream در net.
در معماری Stream در .Net سه مفهوم Backing Store Streams، Decorator Streams و Stream adapters وجود دارد. Backing Store شامل منابع سخت افزاری می شود که خواندن و نوشتن فایل ها در این قسمت صورت می گیرد. Filestream در سی شارپ مخصوص کار با فایل ها و خواندن و نوشتن اطلاعات بر روی هارد دیسک است.
Memorystream در سی شارپ امکان مدیریت داده ها در حافظه Ram را فراهم می کند. Network Stream نیز مربوط به کار بر روی داده ها در شبکه می باشد. Decorator Streams به طور کلی به یک کلاس قابلیت هایی را اضافه می کند و تزئین کننده است. قابلیت هایی مانند Gzip Stream که برای فشرده سازی داده ها از آن استفاده می شود. Decorator Streams به نوعی Backing Store را Decorate کرده و ویژگی هایی جدید به آن می بخشد. به طور مثال می توان در کنار Filestream در سی شارپ به طور همزمان از Gzip Stream نیز به منظور فشرده سازی استفاده کرد.
Decorator بر اساس اصول SOLID طراحی شده تا Backing Store ها مجبور نباشند این قابلیت ها را در کلاس های خود پیاده سازی کنند. برای نمونه زمانی که دارید از Network Stream استفاده می کنید می توانید قابلیت هایی مانند Buffered Stream یاGzip Stream را اضافه کنید. دیگر لازم نیست خود کلاس Network Stream این قابلیت ها را در کلاس های خود پیاده سازی کند. کلاس های دیگری به نام Decorator این قابلیت ها را پیاده سازی کردند و می توانند مثلا یک نمونه از Network Stream را بگیرند و این قابلیت ها را به آن اضافه کنند. می توان از چندین Decorator بر روی Backing Store ها استفاده کرد. به طور مثال زمانی که یک Filestream در سی شارپ دارید، می توانید چندین Decorator Streams به صورت زنجیره در ادامه آن داشته باشید تا قابلیت هایی را به Filestream اضافه کند.
Stream در سی شارپ و Stream Adapters
Stream در سی شارپ با بایت کار می کند. یعنی زمانی که شما بخواهید با استفاده از کلاس Filestream داده ای را از روی هارد بخوانید، به صورت بایت داده مورد نظر خوانده می شود. زمانی که می خواهید دیتایی را از شبکه دریافت کنید، آن هم به صورت بایت خوانده می شود. نوشتن دیتا نیز با استفاده از بایت باید صورت گیرد. در این مرحله کارایی Stream Adapters مشخص می شود. Stream Adapters نیز نوعی Design pattern است و برای تبدیل دیتا کاربرد دارد. فرض کنید که می خواهیم در یک برنامه فایل XML خوانده شود؛ فایل XML از روی هارد با استفاده از کلاس Filestream در اپلیکیشن لود می شود. Filestream در ابتدا به ما بایت تحویل می دهد و این بایت ها باید به دیتای قابل شناسایی تبدیل شود. این جا از Adapter ای مانند XML Reader استفاده می شود.
xml Reader از ورودی یک Backing Store مانند FileStream، Memorystream و ... دریافت کرده و آن را به صورت فایل XML می خواند. این نوع دیتا در برنامه نویسی سطح بالا کاربرد دارد. زیرا در برنامه نویسی سطح بالا با بایت ها کار نخواهیم کرد. فرض کنید می خواهیم دیتای یک فایل txt را در اپلیکیشن خود بخوانیم. در این مرحله ما نیازی نداریم که بایت را دریافت کنیم ما می خواهیم دیتا را به صورت string دریافت کنیم. در این مرحله Streamreader در سی شارپ وارد می شود و به صورت تکست دیتای مدنظر را به ما تحویل می دهد. زمانی که قصد داریم دیتایی را روی هارد بنویسیم نیازی نیست که آن را به بایت تبدیل کرده و به FileStream تحویل دهیم. اینجا نیز از Streamwriter در سی شارپ که نوعی Stream Adapters است، استفاده می کنیم.
چکیده مبحث بررسی معماری Stream در سی شارپ
Backing Store Streams مکان هایی هستند که داده های ما در آن جا قرار داده شده است؛ مانند هارد دیسک که از Filestream در سی شارپ برای کار با فایل های روی هارد استفاده می کنیم. Network Streams برای کار با داده های شبکه است؛ زمانی که شما می خواهید داده ای را از شبکه خوانده یا به روی شبکه بفرستید. Backing Store ها داده ها را با استفاده از بایت به ما تحویل می دهند و اگر بخواهیم داده ای را به آن ها تحویل دهیم باید به صورت بایت تحویل دهیم. از Decorator Streams به منظور افزودن قابلیت های دیگر به Backing Store Streams استفاده می شود. مانند Gzip Stream که برای فشرده سازی کاربرد دارد.
Stream Adapters برای برنامه نویسی سطح بالا ارائه شده است. زمانی که بخواهید یک string را بخوانید یا بنویسید دیگر نیازی نیست که با بایت ها کار کنید. می توانید از Stream Adapters هایی مانند Streamreader در سی شارپ و Streamwriter در سی شارپ استفاده کنید. Adapters یک Backing Stream را دریافت می کند و تبدیل های مورد نظر را انجام می دهد. این کار برنامه نویسی را برای ما ساده تر خواهد کرد.
این ویدئو بخشی از آموزش فصل سیزدهم از دوره ستارگان سی شارپ می باشد .