پرشین تم مقالات آموزش معماری MVC در فلاتر

آموزش معماری MVC در فلاتر

image profile پرشین تم - 01 دی 1403 - 20:21 دانلود مقاله

MVC (Model-View-Controller) یک الگوی طراحی است که به شما کمک می کند برنامه Flutter خود را به روشی ساختاریافته سازماندهی کنید. در اینجا خلاصه ای از نحوه عملکرد آن آورده شده است:

آموزش معماری MVC در فلاتر

مدل

مدل داده ها و منطق تجاری برنامه را نشان می دهد. به طور مستقیم داده ها، منطق و قوانین برنامه را مدیریت می کند.

 

ویو

View مسئول UI است. داده ها را از مدل به کاربر نمایش می دهد و اقدامات کاربر (مانند فشار دادن دکمه) را به کنترلر ارسال می کند.

 

کنترلر

کنترلر به عنوان یک واسطه بین Model و View عمل می کند. ورودی‌های کاربر را پردازش می‌کند، مدل را به‌روزرسانی می‌کند، و View را بر این اساس تغییر می‌دهد.

 

مثال

در اینجا یک مثال ساده برای نشان دادن الگوی MVC در Flutter آورده شده است:

1. مدل:

class CounterModel {
  int _counter = 0;
  int get counter => _counter;   void increment() {
    _counter++;
  }
}

2. ویو:

import 'package:flutter/material.dart';

class CounterView extends StatelessWidget {
  final int counter;
  final VoidCallback onIncrement;

  CounterView({required this.counter, required this.onIncrement});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter MVC Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$counter',
              style: Theme.of(context).textTheme.headline4,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: onIncrement,
              child: Text('Increment'),
            ),
          ],
        ),
      ),
    );
  }
}

3. کنترلر:

import 'package:flutter/material.dart';

class CounterController {
  final CounterModel _model;
  CounterController(this._model);
  void increment() {
    _model.increment();
  }
  int get counter => _model.counter;
}

void main() {
  final model = CounterModel();
  final controller = CounterController(model);
  runApp(MyApp(controller: controller));
}

class MyApp extends StatelessWidget {
  final CounterController controller;
  MyApp({required this.controller});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ValueListenableBuilder(
        valueListenable: controller,
        builder: (context, CounterModel model, child) {
          return CounterView(
            counter: model.counter,
            onIncrement: controller.increment,
          );
        },
      ),
    );
  }
}

در این مثال:

  • مدل (CounterModel) مقدار شمارنده را نگه می دارد و روش هایی را برای دستکاری آن ارائه می دهد.
  • View (CounterView) مقدار شمارنده و دکمه ای را برای شروع عمل افزایش نمایش می دهد.
  • کنترلر  (CounterController) منطق افزایش شمارنده و ارائه مقدار به روز شده به View را مدیریت می کند.

 

اطلاعات بیشتر در مورد MVC

مزایای استفاده از MVC:

  • نگرانی های جداسازی: MVC برنامه را به سه جزء به هم پیوسته جدا می کند، که مدیریت آن را آسان تر می کند، به خصوص که برنامه شما از نظر اندازه و پیچیدگی رشد می کند.
  • قابلیت استفاده مجدد: از آنجایی که مولفه های View و Model جدا هستند، می توانید از View های خود با مدل های مختلف یا برعکس استفاده مجدد کنید.
  • سهولت تست: تست هر جزء به صورت جداگانه ساده تر می شود. به عنوان مثال، می توانید مدل ها و کنترلرهای خود را بدون نگرانی در مورد رابط کاربری آزمایش کنید.
  • قابلیت نگهداری: با سازماندهی کد خود در لایه ها، مکان یابی و رفع اشکالات آسان تر می شود.

 

معایب استفاده از MVC:

  • Boilerplate Code: ممکن است در نهایت کدهای دیگ بخار زیادی بنویسید، به خصوص برای برنامه های ساده.
  • پیچیدگی: برای کاربردهای بسیار ساده، MVC می‌تواند پیچیدگی غیر ضروری ایجاد کند.

 

یک مثال پیشرفته تر

بیایید مثال قبلی را با افزودن ویژگی‌های بیشتر، مانند کاهش شمارنده و نشان دادن تاریخچه تغییرات، گسترش دهیم.

1. مدل: به‌روزرسانی برای پشتیبانی از کاهش و حفظ سابقه.

class CounterModel {
  int _counter = 0;
  List<int> _history = [];

  int get counter => _counter;
  List<int> get history => _history;

  void increment() {
    _history.add(_counter);
    _counter++;
  }

  void decrement() {
    _history.add(_counter);
    _counter--;
  }
}

2. ویو: به روز رسانی برای نمایش تاریخچه و یک دکمه کاهش.

import 'package:flutter/material.dart';

class CounterView extends StatelessWidget {
  final int counter;
  final VoidCallback onIncrement;
  final VoidCallback onDecrement;
  final List<int> history;

  CounterView({
    required this.counter,
    required this.onIncrement,
    required this.onDecrement,
    required this.history,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter MVC Advanced Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Current counter value:',
            ),
            Text(
              '$counter',
              style: Theme.of(context).textTheme.headline4,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: onIncrement,
              child: Text('Increment'),
            ),
            ElevatedButton(
              onPressed: onDecrement,
              child: Text('Decrement'),
            ),
            SizedBox(height: 20),
            Text(
              'History of changes:',
            ),
            Expanded(
              child: ListView.builder(
                itemCount: history.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('Value: ${history[index]}'),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

import 'package:flutter/material.dart';

class CounterController {
  final CounterModel _model;
  CounterController(this._model);

  void increment() {
    _model.increment();
  }

  void decrement() {
    _model.decrement();
  }

  int get counter => _model.counter;
  List<int> get history => _model.history;
}

void main() {
  final model = CounterModel();
  final controller = CounterController(model);
  runApp(MyApp(controller: controller));
}

class MyApp extends StatelessWidget {
  final CounterController controller;
  MyApp({required this.controller});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ValueListenableBuilder(
        valueListenable: controller,
        builder: (context, CounterModel model, child) {
          return CounterView(
            counter: model.counter,
            onIncrement: controller.increment,
            onDecrement: controller.decrement,
            history: model.history,
          );
        },
      ),
    );
  }
}

در این مثال پیشرفته، ما عملکردی را برای کاهش شمارنده و نمایش تاریخچه تغییرات اضافه کردیم. این نشان می‌دهد که چگونه MVC می‌تواند نیازهای پیچیده‌تری را در حالی که کد را منظم و قابل نگهداری نگه می‌دارد، برطرف کند.

نکته کلیدی در اینجا این است که MVC می تواند به شما در ساخت برنامه های مقیاس پذیر و قابل نگهداری با جداسازی واضح نگرانی ها کمک کند.

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

با خرید اشتراک می توانید تا چندین برابر مبلغ خرید اشتراک خود قالب های HTML ، سورس کدهای آماده و یا مقالات دانلود کنید
شما می توانید تنها فقط با مبلغ 3,000,000 میلیون تومان وب سایت سفارسی برای خود داشته باشید
محبوب ترین مقالات
تفاوت بین CSS و SCSS چیست؟ تفاوت بین CSS و SCSS چیست؟
category برنامه نویسی 07 اسفند 1402
تفاوت بین RDBMS و DBMS تفاوت بین RDBMS و DBMS
category برنامه نویسی 02 فروردین 1403
کاوش در معماری GPT-3 کاوش در معماری GPT-3
category هوش مصنوعی 12 اسفند 1402
کلمات کلیدی در SQL کلمات کلیدی در SQL
category برنامه نویسی 01 خرداد 1403
تفاوت بین CSS، SASS و SCSS چیست؟ تفاوت بین CSS، SASS و SCSS چیست؟
category برنامه نویسی 13 اسفند 1402
انواع Join در SQL انواع Join در SQL
category برنامه نویسی 02 فروردین 1403
ChatGPT چیست؟ ChatGPT چیست؟
category هوش مصنوعی 12 اسفند 1402
آخرین مقالات
🎨 نظریه یا تئوری طراحی چیست؟ 🎨 نظریه یا تئوری طراحی چیست؟ نظریه طراحی چارچوب فکری است که نحوه درک، خلق و ارزیابی طراحی را هدایت می‌کند. این نظریه، فلسفه، زیبایی‌شناسی، عملکرد و...
category کامپیوتر 05 مرداد 1404
سفر من به داستان‌سرایی بصری - طراحی رابط کاربری و طراحی لوگو سفر من به داستان‌سرایی بصری - طراحی رابط کاربری و طراحی لوگو چگونه سفر خود را به سمت طراحی لوگو، گرافیک و رابط کاربری/تجربه کاربری آغاز کنید. برای موفقیت در طراحی لوگو، طراحی گراف...
category کامپیوتر 02 مرداد 1404
🧠 درک هوش مصنوعی- از مبانی تا مرزها 🧠 درک هوش مصنوعی- از مبانی تا مرزها هوش مصنوعی تقریباً هر صنعتی را تغییر شکل می‌دهد، در این مقاله با یک مرور کلی آکادمیک سطح بالا شروع کنیم و آن را به بخش...
category هوش مصنوعی 27 تیر 1404