美文网首页让前端飞优美编程
封装重复的逻辑,而非封装重复的代码

封装重复的逻辑,而非封装重复的代码

作者: 小遁哥 | 来源:发表于2020-06-07 18:50 被阅读0次

0

"重复的逻辑" 和 "重复的代码" 是两种相对的状态,可以通过共性来衡量,看到"足够多" 的共性是封装的前提。

共性是指在某一个角度上,不同的事物可以被看成相同的。

人和狗的共性是同为动物,人和沙子的共性是同为地球上的物质,当共性抽象到这种程度,我们应该反思自己的封装是否过渡了。

1

看一个封装重复代码的例子

实现代码

<Pagination
  current={current}
  pageSize={pageSize}
  total={total}
  pageSizeOptions={['20', '50', '100']}
  showQuickJumper={true}
  showSizeChanger={true}
  showTotal={this.showTotal}
  onChange={this.onChange}
  onShowSizeChange={this.onShowSizeChange}
/>
  private showTotal = (total: number) => {
    return `总数:${total}`;
  };

结果下一个页面分页器还是这个鬼样子,我又连续看了几张设计图,都是这样,是时候展现真正的技术了。

PagePagination.tsx

interface PagePaginationProps {
  current: number;
  pageSize: number;
  total: number;
  pageSizeOptions?: string[];
  onChange?: (page: number, pageSize?: number) => void;
  onShowSizeChange?: (current: number, size: number) => void;
}
  public render() {
    const {
      current,
      pageSize,
      total,
      pageSizeOptions,
      onChange,
      onShowSizeChange,
    } = this.props;
    return (
      <Pagination
        current={current}
        pageSize={pageSize}
        total={total}
        pageSizeOptions={pageSizeOptions || ['20', '50', '100']}
        showQuickJumper={true}
        showSizeChanger={true}
        showTotal={this.showTotal}
        onChange={onChange}
        onShowSizeChange={onShowSizeChange}
      />
    );
  }
  private showTotal(total: number) {
    return `总数:${total}`;
  }

使用的时候只需要

  public render() {
    const { current, pageSize, total } = this.state;
    return (
      <PagePagination
        current={current}
        pageSize={pageSize}
        total={total}
        onChange={this.onChange}
        onShowSizeChange={this.onShowSizeChange}
      ></PagePagination>
    );
  }

2

然并卵,上面的封装过于刚性。

这里的共性是什么?无非是给antdPagination组件一些默认行为。

PagePaginationProps直接继承PaginationProps,没必要自己写一遍

import { PaginationProps } from 'antd/lib/pagination';
interface PagePaginationProps extends PaginationProps {}

通过defaultProps 设置默认值

const defaultPageSize = '20';
...
static defaultProps = {
    pageSize: defaultPageSize,
    pageSizeOptions: [defaultPageSize, '50', '100'],
    showQuickJumper: true,
    showSizeChanger: true,
    showTotal: (total: number) => {
      return `总数:${total}`;
    },
  };
...
  public render() {
    return <Pagination {...this.props} />;
  }

它是灵活的,可以满足一些特殊页面的需求。

试着去寻找重复代码中的共性吧!

诸天气浩荡,我道日兴隆

轻松一刻

相关文章

  • 封装重复的逻辑,而非封装重复的代码

    0 "重复的逻辑" 和 "重复的代码" 是两种相对的状态,可以通过共性来衡量,看到"足够多" 的共性是封装的前提。...

  • 普通轮播图

    效果图如下: html结构代码: 样式代码: js逻辑代码: 其中有些重复代码,可以封装为函数重复调用:

  • 重构

    重构时,先梳理代码,删除无用的逻辑,进行小的消除重复代码重构,封装小方法重构,等等,目的是让大段大段代码之前的耦合...

  • Angular之Service篇

    在AngularJS中,我们经常将通用的业务逻辑封装在服务里面,使公用模块复用率更高,减少重复性代码,提高代码可读...

  • Android BaseAdapter的极简封装

    Android BaseAdapter的极简封装 目的: 减少Adapter基础逻辑重复书写 优化Adapter结...

  • Python之面向对象入门

    面向对象 概述 • 面向过程:根据业务逻辑从上到下写垒代码 • 函数式:将功能代码封装到函数中,无需重复编写整个功...

  • OC:封装 MJRefresh

    背景: 为了避免写大量重复代码,故封装了该分类。本次只是封装了 MJRefresh 的常用场景,包括 Header...

  • 大白话AOP的一些相关概念

    AOP原理 参考:Spring AOP概念理解 (通俗易懂) 面向切面编程,即将重复性的逻辑代码横切出来,封装称单...

  • 多线程 -- NSOperation

    介绍 多线程是为了不影响UI响应 封装后可以避免重复代码 NSOperationQueue:封装线程管理部分NSO...

  • c课堂笔记 day-1

    作业: --函数:就是为了避免代码重复写,进行单独封装 基本概念:把代码中功能相似并且独立的代码单独封装成一个独立...

网友评论

    本文标题:封装重复的逻辑,而非封装重复的代码

    本文链接:https://www.haomeiwen.com/subject/jbhxtktx.html