From 08c1415e17a9ca38b7c3b494cb59b654e6142abb Mon Sep 17 00:00:00 2001 From: Manali Mogre Date: Mon, 17 Aug 2020 22:38:57 +0200 Subject: [PATCH] - Code refactoring as per SOLID Principles --- .../GildedRose/CustomisedItemFactory.swift | 6 ----- .../GildedRose/GlidedRoseConstants.swift | 1 - .../GildedRose/ItemQualityUpdater.swift | 10 +------ .../GildedRose/ItemSellInUpdater.swift | 3 --- .../GildedRose/Items/AgedBrieItem.swift | 9 ++++--- .../Items/BackstagePassesItem.swift | 8 ++++++ .../GildedRose/Items/CustomisedItem.swift | 13 +++++++++ .../GildedRose/Items/StandardItem.swift | 27 ++++++++++++------- 8 files changed, 44 insertions(+), 33 deletions(-) create mode 100644 swift/Sources/GildedRose/Items/CustomisedItem.swift diff --git a/swift/Sources/GildedRose/CustomisedItemFactory.swift b/swift/Sources/GildedRose/CustomisedItemFactory.swift index 9605fee1..a2194f58 100644 --- a/swift/Sources/GildedRose/CustomisedItemFactory.swift +++ b/swift/Sources/GildedRose/CustomisedItemFactory.swift @@ -7,16 +7,10 @@ import Foundation -protocol CustomisedItem { - var item: Item {get set} - func updateItemState() -} - protocol CustomisedItemFactoryCreator { static func getCustomisedItem(item: Item) -> CustomisedItem } - struct CustomisedItemFactory: CustomisedItemFactoryCreator { // Returns the Customised Item based on the Item name static func getCustomisedItem(item: Item) -> CustomisedItem { diff --git a/swift/Sources/GildedRose/GlidedRoseConstants.swift b/swift/Sources/GildedRose/GlidedRoseConstants.swift index 4d4161e0..57dce581 100644 --- a/swift/Sources/GildedRose/GlidedRoseConstants.swift +++ b/swift/Sources/GildedRose/GlidedRoseConstants.swift @@ -17,4 +17,3 @@ struct ValueConstants { static let kHightestQualityValue = 50 static let kLowestQualityValue = 0 } - diff --git a/swift/Sources/GildedRose/ItemQualityUpdater.swift b/swift/Sources/GildedRose/ItemQualityUpdater.swift index 9f56b128..305ac4b6 100644 --- a/swift/Sources/GildedRose/ItemQualityUpdater.swift +++ b/swift/Sources/GildedRose/ItemQualityUpdater.swift @@ -11,14 +11,7 @@ protocol ItemQualityUpdater: CustomisedItem { } extension ItemQualityUpdater { - var isItemUnderHighestQuality: Bool { - return item.quality < ValueConstants.kHightestQualityValue - } - - var isItemMoreThanLowestQuality: Bool { - return item.quality > ValueConstants.kLowestQualityValue - } - + func reduceItemQuality(by value:Int) { item.quality -= value } @@ -33,4 +26,3 @@ extension ItemQualityUpdater { } typealias ItemStateUpdater = ItemSellInUpdater & ItemQualityUpdater - diff --git a/swift/Sources/GildedRose/ItemSellInUpdater.swift b/swift/Sources/GildedRose/ItemSellInUpdater.swift index 2dafaff8..d7332ecc 100644 --- a/swift/Sources/GildedRose/ItemSellInUpdater.swift +++ b/swift/Sources/GildedRose/ItemSellInUpdater.swift @@ -12,9 +12,6 @@ protocol ItemSellInUpdater: CustomisedItem{ } extension ItemSellInUpdater { - var isSellInDatePassed: Bool{ - return item.sellIn < 0 - } func reduceSellInDays(by days: Int) { item.sellIn -= days } diff --git a/swift/Sources/GildedRose/Items/AgedBrieItem.swift b/swift/Sources/GildedRose/Items/AgedBrieItem.swift index 512dbe79..d8a4ba8c 100644 --- a/swift/Sources/GildedRose/Items/AgedBrieItem.swift +++ b/swift/Sources/GildedRose/Items/AgedBrieItem.swift @@ -9,7 +9,11 @@ import Foundation struct AgedBrieItem: ItemStateUpdater{ var item: Item - + + private var isItemUnderHighestQuality: Bool { + return item.quality < ValueConstants.kHightestQualityValue + } + public init(item: Item) { self.item = item } @@ -22,7 +26,4 @@ struct AgedBrieItem: ItemStateUpdater{ guard isItemUnderHighestQuality else { return } increaseItemQuality(by: 1) } - - - } diff --git a/swift/Sources/GildedRose/Items/BackstagePassesItem.swift b/swift/Sources/GildedRose/Items/BackstagePassesItem.swift index 293df2f1..c33ce1f0 100644 --- a/swift/Sources/GildedRose/Items/BackstagePassesItem.swift +++ b/swift/Sources/GildedRose/Items/BackstagePassesItem.swift @@ -10,6 +10,14 @@ import Foundation struct BackstagePassesItem: ItemStateUpdater { var item: Item + private var isItemUnderHighestQuality: Bool { + return item.quality < ValueConstants.kHightestQualityValue + } + + private var isSellInDatePassed: Bool{ + return item.sellIn < 0 + } + public init(item: Item) { self.item = item } diff --git a/swift/Sources/GildedRose/Items/CustomisedItem.swift b/swift/Sources/GildedRose/Items/CustomisedItem.swift new file mode 100644 index 00000000..aed08bb2 --- /dev/null +++ b/swift/Sources/GildedRose/Items/CustomisedItem.swift @@ -0,0 +1,13 @@ +// +// File.swift +// +// +// Created by Manali Mogre on 17/08/2020. +// + +import Foundation + +protocol CustomisedItem { + var item: Item {get set} + func updateItemState() +} diff --git a/swift/Sources/GildedRose/Items/StandardItem.swift b/swift/Sources/GildedRose/Items/StandardItem.swift index 60e5b86d..dea032f7 100644 --- a/swift/Sources/GildedRose/Items/StandardItem.swift +++ b/swift/Sources/GildedRose/Items/StandardItem.swift @@ -10,6 +10,21 @@ import Foundation struct StandardItem: ItemStateUpdater { var item: Item + private var isSellInDatePassed: Bool{ + return item.sellIn < 0 + } + + var decreasingValueOverZeroDaysToSell: Int { + return 1 + } + private var decreasingValueForZeroOrLessDaysToSell: Int { + return 2 * decreasingValueOverZeroDaysToSell + } + + private var isItemMoreThanLowestQuality: Bool { + return item.quality > ValueConstants.kLowestQualityValue + } + public init(item: Item) { self.item = item } @@ -17,9 +32,9 @@ struct StandardItem: ItemStateUpdater { func updateItemState() { // Reduce the sellIn days for Item by 1 reduceSellInDays(by: 1) - + // Reduce the item quality by 1 , if the sell in date is passed decrement by double the value - isSellInDatePassed ? reduceItemQuality(by: decreasingValueForZeroOrLessDaysToSell()) : reduceItemQuality(by: decreasingValueOverZeroDaysToSell()) + isSellInDatePassed ? reduceItemQuality(by: decreasingValueForZeroOrLessDaysToSell) : reduceItemQuality(by: decreasingValueOverZeroDaysToSell) guard isItemMoreThanLowestQuality else { // Sets the quality to zero if the quality is negative @@ -27,12 +42,4 @@ struct StandardItem: ItemStateUpdater { return } } - - func decreasingValueOverZeroDaysToSell() -> Int { - return 1 - } - - private func decreasingValueForZeroOrLessDaysToSell() -> Int { - return 2 * decreasingValueOverZeroDaysToSell() - } }