محمد صادق مهرافزون
محمد صادق مهرافزون
خواندن ۶ دقیقه·۲ ماه پیش

تفاوت Data Binding و View Binding در اندروید

با پیچیده‌تر شدن برنامه‌ها، نیاز به روش‌هایی برای مدیریت مؤثرتر و با خطای کمتر افزایش یافت. در اینجا است که دو تکنیک Data Binding و View Binding به کمک توسعه‌دهندگان می‌آیند.

‏Data Binding و View Binding چیست؟ هر دو تکنیک برای برقراری ارتباط بین کد و رابط کاربری (UI) استفاده می‌شوند، اما تفاوت‌های مهمی دارند که بسته به نوع پروژه، ممکن است یکی از آن‌ها را به دیگری ترجیح دهید.

‏‏تفاوت‌ها، مزایا و کاربردهای Data Binding و View Binding

در توسعه اندروید، مدیریت مؤثر اجزای رابط کاربری و ارتباط با آن‌ها حیاتی است. در روش‌های سنتی، توسعه‌دهندگان برای تعامل با عناصر رابط کاربری از ()findViewById استفاده می‌کردند. اما با پیچیده‌تر شدن برنامه‌ها، نیاز به روش‌های کارآمدتر و با خطای کمتر داریم. Data Binding و View Binding دو ابزار قدرتمندی هستند که توسط اندروید برای ساده‌سازی تعاملات رابط کاربری ارائه شده‌اند. هر کدام از این ابزارها کاربرد و ویژگی‌های خاص خود را دارند و در موقعیت‌های متفاوتی استفاده می‌شوند.

View Binding چیست؟‏

در اندروید View Binding کلاس‌های binding را برای هر فایل layout XML در پروژه شما ایجاد می‌کند. این کلاس‌هایbinding به شما این امکان را می‌دهند که به صورت مستقیم و امن به ویوها بدون نیاز به ()findViewById دسترسی پیدا کنید.

ویژگی‌های کلیدی View Binding

  • ویژگی ‏امنیت نوع (Type Safety): View Binding با تولید یک کلاس binding بر اساس فایل XML اطمینان می‌دهد که نوع‌ها به درستی رعایت شده‌اند. این ویژگی خطر بروز خطاهای null pointer را که ناشی از شناسه‌های اشتباه یا تبدیل‌های نادرست هستند، از بین می‌برد.

مثال : فرض کنید در یک فایل XML به نام activity_main.xml یک TextView با شناسه textView دارید. با استفاده از View Binding، کلاس binding به صورت خودکار تولید می‌شود و به شما اجازه می‌دهد به صورت امن به این TextView دسترسی پیدا کنید.

  • ‏ویژگی ‏بدون سربار اضافی (No Overhead): این روش سبک و با کمترین سربار نسبت به Data Binding است، چرا که نیازی به استفاده ازannotation‌ها یا عبارات data binding ندارد.

مثال: اگر شما بخواهید از Data Bindingاستفاده کنید، باید در فایل XML از <layout> استفاده کنید و به آن annotation اضافه کنید. اما با View Binding، فقط کافی است به binding class دسترسی پیدا کنید.

  • ‏ ‏ایمنی در برابر null: اگر یک ویو در layout موجود نباشد، کلاس binding تولید شده مرجعی به آن ویو نخواهد داشت. این کار احتمال بروز خطاهای زمان اجرا را کاهش می‌دهد.

فرض کنید در فایل XML یک Button با شناسه button دارید و یک TextView با شناسه textView ندارید. با استفاده از View Binding، کلاس binding به صورت خودکار فقط مرجع Button را شامل می‌شود و از ایجاد خطاهای زمان اجرا جلوگیری می‌کند.

  • سادگی و کارایی: پیاده‌سازی و استفاده از View Bindingبسیار ساده و کارآمد است. به همین دلیل، گزینه‌ای ایده‌آل برای پروژه‌هایی است که نیازی به ویژگی‌های پیشرفته data bindingندارند.

مثال:

‏فعال کردن View Binding در فایل build.gradle:

استفاده از view binding در یک اکتیویتی:

در این مثال، ActivityMainBinding کلاس binding تولید شده‌ای است که به فایل layout activity_main.xml مربوط می‌شود. شما می‌توانید به صورت مستقیم به textView دسترسی پیدا کنید، بدون نیاز به استفاده از ()findViewById.

‏‏‏Data Binding‏ چیست؟

کتابخانه Data Binding‏ ‏یک کتابخانه قدرتمندتر است که به توسعه‌دهندگان اجازه می‌دهد تا اجزای رابط کاربری را به صورت مستقیم به منابع داده در لایه‌های خود متصل کنند. این کار با استفاده از فرمت اعلامی (declarative) انجام می‌شود و نیاز به نوشتن کد برنامه‌نویسی برای این اتصال را کاهش می‌دهد. Data Binding مقدار کد اضافه (boilerplate code) را کاهش می‌دهد و به‌ویژه برای مدیریت به‌روزرسانی‌ها و تعاملات پیچیده رابط کاربری مفید است.

ویژگی‌های کلیدی Data Binding:

  • دوطرفه (Two-Way Binding): Data Binding از بسته‌بندی دوطرفه پشتیبانی می‌کند، به این معنی که تغییرات در رابط کاربری به‌طور خودکار داده‌های زیرین را به‌روزرسانی می‌کند و بالعکس. این ویژگی به‌ویژه در برنامه‌های مبتنی بر فرم مفید است، جایی که ورودی‌های کاربر باید در مدل داده منعکس شوند.

مثال : فرض کنید یک فرم ثبت‌نام دارید که شامل یک فیلد EditText برای وارد کردن نام کاربر است. با استفاده از Data Binding، می‌توانید به‌طور خودکار تغییرات در EditText را به مدل داده منتقل کنید و همچنین تغییرات در مدل را به EditText بازتاب دهید:

در اینجا، وقتی کاربر نام خود را وارد کند، user.name به‌روزرسانی می‌شود و اگر برنامه user.name را تغییر دهد، مقدار جدید به‌طور خودکار در EditText نمایش داده می‌شود.

  • زبان بیان (Expression Language): شما می‌توانید عبارات را به‌طور مستقیم در فایل‌های XML بنویسید، که این کار را برای دستکاری و نمایش داده‌ها آسان می‌کند بدون نیاز به منطق اضافی در فعالیت (Activity) یا Fragment شما.

در اینجا، اگر سن کاربر بیش از ۱۸ باشد، TextView متن "بزرگسال" را نشان می‌دهد، در غیر این صورت "کودک" را نمایش می‌دهد.

  • داده‌های قابل مشاهده (Observable Data): Data Binding به‌خوبی با منابع داده قابل مشاهده مانند LiveData ادغام می‌شود و مدیریت به‌روزرسانی‌های رابط کاربری در پاسخ به تغییرات داده را آسان‌تر می‌کند.

مثال: فرض کنید که شما از LiveData برای مدیریت وضعیت یک اپلیکیشن استفاده می‌کنید. با استفاده از Data Binding، می‌توانید به راحتی تغییرات در LiveData را در UI خود بازتاب دهید:

و در فایل XML:

با این تنظیمات، هر بار که user در UserViewModel تغییر کند، TextView به‌طور خودکار به‌روزرسانی خواهد شد.

  • موارد استفاده پیشرفته (Advanced Use Cases): این روش ایده‌آل برای سناریوهایی است که در آن‌ها نیاز به اتصال مدل‌های داده پیچیده، پیاده‌سازی منطق سفارشی، یا انجام اتصال شرطی به‌طور مستقیم در XML دارید.

مثال: فرض کنید که می‌خواهید یک دکمه ایجاد کنید که بر اساس شرایط خاصی فعال یا غیرفعال شود. با استفاده از Data Binding، می‌توانید این منطق را به‌راحتی در XML پیاده‌سازی کنید:

در اینجا، اگر isActive در مدل داده user تغییر کند، وضعیت فعال یا غیرفعال بودن دکمه به‌طور خودکار به‌روز خواهد شد. این نوع اتصال، کد نویسی را ساده‌تر و منطق را شفاف‌تر می‌کند.


فعال کردن data binding در فایل build.gradle :

ایجاد یک data class:

استفاده از data binding در یک Activity:

وصل کردن data در XML:

در این مثال، nameTextView به طور خودکار به‌روزرسانی می‌شود تا نام کاربر را نمایش دهد زمانی که Data Binding انجام می‌شود.


چه زمانی از View Binding و Data Binding استفاده کنیم؟

از View Binding استفاده کنید اگر:

  • به دنبال راهی ساده و کارآمد برای تعامل با ویوها هستید.
  • نیازی به انجام عملیات پیچیده روی داده‌ها یا منطق binding در لایه‌های خود ندارید.
  • می‌خواهید خطر بروز خطاهای null pointer را کاهش دهید و از findViewById() اجتناب کنید.

از Data Binding استفاده کنید اگر:

  • به اتصال دوطرفه (two-way binding) بین رابط کاربری و مدل داده نیاز دارید.
  • می‌خواهید منطق و عبارات را مستقیماً در XML بنویسید تا به‌روزرسانی‌های پویا در UI داشته باشید.
  • از منابع داده قابل مشاهده مانند LiveData استفاده می‌کنید و به دنبال یکپارچگی آسان با UI هستید.

این تفاوت‌ها به شما کمک می‌کنند تا تصمیم بگیرید کدام روش برای پروژه شما مناسب‌تر است. View Binding برای پروژه‌های ساده و کم پیچیده، و Data Binding برای پروژه‌هایی که نیاز به پیوندهای پویا و پیچیده دارند مناسب است.


نتیجه گیری:

هر دو روش Data Binding و View Binding ابزارهای قدرتمندی در برنامه‌های اندروید هستند. View Binding برای موارد استفاده ساده مناسب است و جایگزینی سبک و ایمن برای ()findViewById محسوب می‌شود. از سوی دیگر، Data Binding یک راهکار غنی‌تر با قابلیت‌های بیشتر است که در مواردی که نیاز به به‌روزرسانی‌های پویا و تعاملات پیچیده با داده‌ها وجود دارد، به خوبی عمل می‌کند.

و در نهایت انتخاب بهترین گزینه به نیازهای خاص پروژه بستگی دارد.



ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:

بقیه آموزش های من با نام (mister developer) را می توانید در تلگرام و اینستاگرام دنبال کنید!!

کانال تلگرام: mister_developerr

اینستاگرام: mister_developerr

موفق و پیروز باشید

data bindingview bindingبرنامه نویسیبرنامه نویسی اندرویدkotlin
شاید از این پست‌ها خوشتان بیاید