指标/AbcSize:fill_arrays 的分配分支条件大小太高 [<9, 21, 0> 22.85/17]

问题描述

我需要用 ffaker 生成随机数据,但不知道如何在这里修复 abcsize

这是我所拥有的

class Library
  attr_accessor :authors,:books,:orders,:readers

  def initialize(authors = [],books = [],orders = [],readers = [])
    @books = books
    @orders = orders
    @readers = readers
    @authors = authors
  end

  def create_data
    @authors = []
    @books = []
    @readers = []
    @orders = []

    100.times do
      authorname = FFaker::Book.author
      biography = FFaker::Book.description
      title = FFaker::Book.title
      name = FFaker::Name.name
      email = FFaker::Internet.email
      city = FFaker::Address.city
      street = FFaker::Address.street_name
      house = rand(1 - 10_000)
      date = Time.Now.utc.strftime('%d.%m.%Y')

      @authors.push(Author.new(authorname,biography))
      @books.push(Book.new(title,authorname))
      @readers.push(Reader.new(name,email,city,street,house))
      @orders.push(Order.new(title,name,date))
    end
  end
end

所以我决定创建一些私有方法,但仍然有很大的 abcsize

class Library
  attr_accessor :authors,readers = [])
    @books = books
    @orders = orders
    @readers = readers
    @authors = authors
  end

  def create_data
    create_arrays
    fill_arrays
  end
   
  private

  def create_arrays
    @authors = []
    @books = []
    @readers = []
    @orders = []
  end

  def fill_arrays
    100.times do
      authorname = FFaker::Book.author
      biography = FFaker::Book.description
      title = FFaker::Book.title
      name = FFaker::Name.name
      email = FFaker::Internet.email
      city = FFaker::Address.city
      street = FFaker::Address.street_name
      house = rand(1 - 10_000)
      date = Time.Now.utc.strftime('%d.%m.%Y')

      @authors.push(Author.new(authorname,date))
    end
  end
end

我真的无法将那个 ffaker 部分分开,因为:

  1. 来自 Books 的作者必须是 Author 类的实例。
  2. 从订单中预订,必须是 Book 类的实例。

如果有人能帮助我,我将不胜感激,在重构方面没有太多经验

方法分离部分按照@Sergii-k 的建议工作,但现在我在关联方面遇到了一些麻烦

class Library
  attr_accessor :authors,:readers

  def initialize(authors: [],books: [],orders: [],readers: [])
    @books = books
    @orders = orders
    @readers = readers
    @authors = authors
  end

  def create_arrays
    @authors = []
    @books = []
    @readers = []
    @orders = []
  end

  def create_data
    create_arrays
    fill_arrays
  end

  def show
    create_data
    puts @authors
    puts @books
    puts @orders
    puts @readers
  end

  def build_author
    name = FFaker::Book.author
    biography = FFaker::Book.description
    Author.new(name,biography)
  end

  def build_book(author)
    title = FFaker::Book.title
    Book.new(title,author.name)
  end

  def build_reader
    name = FFaker::Name.name
    email = FFaker::Internet.email
    city = FFaker::Address.city
    street = FFaker::Address.street_name
    house = rand(1 - 10_000)
    Reader.new(name,house)
  end

  def build_order(reader)
    date = Time.Now.utc.strftime('%d.%m.%Y')
    title = FFaker::Book.title
    Order.new(title,reader.name,date)
  end

  def fill_arrays
    1.times do
      author = build_author
      reader = build_reader

      @authors.push(author)
      @books.push(build_book(author))
      @readers.push(reader)
      @orders.push(build_order(reader))
    end
  end
end

 

这是现在的问题部分

  def build_book(author)
    title = FFaker::Book.title
    Book.new(title,author.name)
  end

  def build_order(reader)
    date = Time.Now.utc.strftime('%d.%m.%Y')
    title = FFaker::Book.title
    Order.new(title,date)
  end

我现在得到 2 个不同的标题,因为我用这两种方法生成它们。试图传递一个参数,但没有用

  def build_order(book,reader)
    date = Time.Now.utc.strftime('%d.%m.%Y')
    Order.new(book.title,date)
  end

完成,效果很好!

class Library
  attr_accessor :authors,house)
  end

  def build_order(book,date)
  end

  def fill_arrays
    1.times do
      author = build_author
      reader = build_reader
      book   = build_book(author)

      @authors.push(author)
      @books.push(book)
      @readers.push(reader)
      @orders.push(build_order(book,reader))
    end
  end
end

这里是来自 yml 文件的日志

--- !ruby/object:Library
books:
- !ruby/object:Book
  title: Case of the Missing Hungry Imp
  author: Twila Mante
orders:
- !ruby/object:Order
  book: Case of the Missing Hungry Imp
  reader: Monty Feeney
  date: 19.03.2021
readers:
- !ruby/object:Reader
  name: Monty Feeney
  email: lamonica.friesen@williamson.com
  city: Croninport
  street: Pfeffer Neck
  house: 3002
authors:
- !ruby/object:Author
  name: Twila Mante
  biography: Ut porro deserunt voluptatem velit. Atque dicta labore ratione minima
    sapiente. Dolor doloremque dolorem harum sint. At voluptatum molestias adipisci
    vero. Perspiciatis rerum nesciunt maiores vitae.

解决方法

您可以进一步分离方法:

def build_author
  # ...
  Author.new(authorname,biography)
end

def build_book(author)
  # ...
  Book.new(title,author.authorname)
end

def build_reader
  # ...
  Reader.new(name,email,city,street,house)
end

def build_order(book,reader)
  # ...
  Order.new(book.title,reader.name,date)
end

def fill_arrays
  100.times do
    author = build_author
    reader = build_reader
    book   = build_book(author)

    @authors.push(build_author)
    @books.push(book)
    @readers.push(reader)
    @orders.push(build_order(book,reader))
  end
end

更新:我注意到,有些参数是跨方法共享的。您可以将它们作为参数传递。

更新:修正书名。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...