业务逻辑和UI逻辑之间有什么区别?

时间:2020-05-21 05:13:29

标签: flutter dart bloc flutter-bloc flutter-state

我正在flutter学习状态管理,大部分时间我都遇到business logic ui logic字,有时甚至是presentation logic,我在网上以人们的身份进行搜索用不同的语言来解释它,我无法更好地理解它,有人能以示例的形式展示这三种logic并非常简洁地解释它吗?

1 个答案:

答案 0 :(得分:5)

使用库时,将库与代码的关键部分(业务逻辑)分开是我们的责任和使命。
例如,在遵循这些原则的“干净架构”中,目标是将关注点和角色分离为以下类别:
1)UI(用户界面)
2)格式化程序(格式,法律部分,内容)
3)业务逻辑(业务规则)
4)数据(可以是内存中的网络,例如API或在线数据库或本地持久性存储/数据库)

在UI部件上使用跨平台/多平台的解决方案(如波动)可能比在Business部件上更具逻辑性。
业务逻辑不会经常更改,但是在开发UI时可能会经常更改。
例如,对于网络调用,我们既可以自己实现该层,也可以依赖于众所周知的库。如果明天出现了新的更好的解决方案,我们只需要替换该层的实现,而不会影响整个模块或项目。
有时,当客户说应用程序需要具有相同功能的新UI时,可能是在大多数情况下仅在更改UI而不影响背后功能的逻辑的前提下构建的。
在颤动的情况下,请考虑增加印刷机计数的基本应用示例,逻辑应分开(也许在其他类/文件中),因此如果我们需要将印刷1,2,3次更改为按a,b ,c ...次按,唯一的业务逻辑应该更改。
请遵循以下示例:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 65;
  String hello = "a";

  // the only business logic change will be here...No UI change require
  void _incrementCounter() {
    setState(() {
      hello = String.fromCharCode(_counter);
      if(_counter!=90)
        _counter++;
      else
        _counter = 65;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$hello',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

仍然不了解,请参考以下内容:
(1)(2)(3)

相关问题