h dave

h dave

  • NA
  • 50
  • 3.9k

I have query regarding refactoring code

Sep 4 2019 11:45 AM
the website sells lawnmowers, phone cases and t-shirts. Their database is a mess but you have access to their variousproduct listings. The goal is to consolidate all of the client's products into a single list so that they can be sorted and displayed on the client's website.
 
I want to refactor code in AgularJS
 
Please find attached ZIP file
 
Is anyone there who can guide me and provide me solution for this that will be much Appreciated
 
Refactor Me :
 
  1. function ProductDataConsolidator() {  
  2. }  
  3. ProductDataConsolidator.get = function () {  
  4. var l = new LawnmowerRepository().getAll();  
  5. var p = new PhoneCaseRepository().getAll();  
  6. var t = new TShirtRepository().getAll();  
  7.   
  8. var products = [];  
  9.   
  10. for (var i = 0; i < l.length; i++) {  
  11. products.push({  
  12. id: l[i].id,  
  13. name: l[i].name,  
  14. price: l[i].price.toFixed(2),  
  15. type: "Lawnmower"  
  16. });  
  17. }  
  18.   
  19. for (var i = 0; i < p.length; i++) {  
  20. products.push({  
  21. id: p[i].id,  
  22. name: p[i].name,  
  23. price: p[i].price.toFixed(2),  
  24. type: "Phone Case"  
  25. });  
  26. }  
  27.   
  28. for (var i = 0; i < t.length; i++) {  
  29. products.push({  
  30. id: t[i].id,  
  31. name: t[i].name,  
  32. price: t[i].price.toFixed(2),  
  33. type: "T-Shirt"  
  34. });  
  35. }  
  36.   
  37. return products;  
  38. }  
  39.   
  40. ProductDataConsolidator.getInUSDollars = function () {  
  41. var l = new LawnmowerRepository().getAll();  
  42. var p = new PhoneCaseRepository().getAll();  
  43. var t = new TShirtRepository().getAll();  
  44.   
  45. var products = [];  
  46.   
  47. for (var i = 0; i < l.length; i++) {  
  48. products.push({  
  49. id: l[i].id,  
  50. name: l[i].name,  
  51. price: (l[i].price * 0.76).toFixed(2),  
  52. type: "Lawnmower"  
  53. });  
  54. }  
  55.   
  56. for (var i = 0; i < p.length; i++) {  
  57. products.push({  
  58. id: p[i].id,  
  59. name: p[i].name,  
  60. price: (p[i].price * 0.76).toFixed(2),  
  61. type: "Phone Case"  
  62. });  
  63. }  
  64.   
  65. for (var i = 0; i < t.length; i++) {  
  66. products.push({  
  67. id: t[i].id,  
  68. name: t[i].name,  
  69. price: (t[i].price * 0.76).toFixed(2),  
  70. type: "T-Shirt"  
  71. });  
  72. }  
  73.   
  74. return products;  
  75. }  
  76.   
  77. ProductDataConsolidator.getInEuros = function () {  
  78. var l = new LawnmowerRepository().getAll();  
  79. var p = new PhoneCaseRepository().getAll();  
  80. var t = new TShirtRepository().getAll();  
  81.   
  82. var products = [];  
  83.   
  84. for (var i = 0; i < l.length; i++) {  
  85. products.push({  
  86. id: l[i].id,  
  87. name: l[i].name,  
  88. price: (l[i].price * 0.67).toFixed(2),  
  89. type: "Lawnmower"  
  90. });  
  91. }  
  92.   
  93. for (var i = 0; i < p.length; i++) {  
  94. products.push({  
  95. id: p[i].id,  
  96. name: p[i].name,  
  97. price: (p[i].price * 0.67).toFixed(2),  
  98. type: "Phone Case"  
  99. });  
  100. }  
  101.   
  102. for (var i = 0; i < t.length; i++) {  
  103. products.push({  
  104. id: t[i].id,  
  105. name: t[i].name,  
  106. price: (t[i].price * 0.67).toFixed(2),  
  107. type: "T-Shirt"  
  108. });  
  109. }  
  110.   
  111. return products;  
  112. }  
  113. function ProductDataRenderer() {  
  114. }  
  115.   
  116. ProductDataRenderer.prototype.render = function () {  
  117. var nzd =  
  118. '<table class="table table-striped">'  
  119. +' <thead>'  
  120. +' <tr><td colspan="3">Products (NZD)</td></tr>'  
  121. +' <tr>'  
  122. +' <td>Name</td>'  
  123. +' <td>Price</td>'  
  124. +' <td>Type</td>'  
  125. +' </tr>'  
  126. +' </thead>'  
  127. ' <tbody>';  
  128.   
  129. var n = ProductDataConsolidator.get();  
  130. for (var i = 0; i < n.length; i++) {  
  131. nzd +=  
  132. '<tr>'  
  133. '<td>' + n[i].name +'</td>'  
  134. '<td>' + n[i].price + '</td>'  
  135. '<td>' + n[i].type + '</td>'  
  136. '</tr>';  
  137. }  
  138. nzd += '</tbody></table>';  
  139. document.getElementById("nzdProducts").innerHTML = nzd;  
  140.   
  141. var usd =  
  142. '<table class="table table-striped">'  
  143. ' <thead>'  
  144. ' <tr><td colspan="3">Products (USD)</td></tr>'  
  145. ' <tr>'  
  146. ' <td>Name</td>'  
  147. ' <td>Price</td>'  
  148. ' <td>Type</td>'  
  149. ' </tr>'  
  150. ' </thead>'  
  151. ' <tbody>';  
  152.   
  153. var u = ProductDataConsolidator.getInUSDollars();  
  154. for (var i = 0; i < u.length; i++) {  
  155. usd +=  
  156. '<tr>'  
  157. '<td>' + u[i].name + '</td>'  
  158. '<td>' + u[i].price + '</td>'  
  159. '<td>' + u[i].type + '</td>'  
  160. '</tr>';  
  161. }  
  162. usd += '</tbody></table>';  
  163. document.getElementById("usdProducts").innerHTML = usd;  
  164.   
  165. var euro =  
  166. '<table class="table table-striped">'  
  167. ' <thead>'  
  168. ' <tr><td colspan="3">Products (Euro)</td></tr>'  
  169. ' <tr>'  
  170. ' <td>Name</td>'  
  171. ' <td>Price</td>'  
  172. ' <td>Type</td>'  
  173. ' </tr>'  
  174. ' </thead>'  
  175. ' <tbody>';  
  176.   
  177. var e = ProductDataConsolidator.getInEuros();  
  178. for (var i = 0; i < e.length; i++) {  
  179. euro +=  
  180. '<tr>'  
  181. '<td>' + e[i].name + '</td>'  
  182. '<td>' + e[i].price + '</td>'  
  183. '<td>' + e[i].type + '</td>'  
  184. '</tr>';  
  185. }  
  186. euro += '</tbody></table>';  
  187. document.getElementById("euProducts").innerHTML = euro;  
  188.   
  189.   
  190. }  
  191. Do not refector me :  
  192. function LawnmowerRepository() {  
  193. }  
  194.   
  195. LawnmowerRepository.prototype.getAll = function () {  
  196. return [  
  197. {  
  198. id: 1,  
  199. name: "Hewlett-Packard Rideable Lawnmower",  
  200. fuelEfficiency: "Very Low",  
  201. isVehicle: true,  
  202. price: 3000  
  203. }, {  
  204. id: 2,  
  205. name: "Fisher Price's My First Lawnmower",  
  206. fuelEfficiency: "Ultimate",  
  207. isVehicle: false,  
  208. price: 45  
  209. }, {  
  210. id: 3,  
  211. name: "Volkswagen LawnMaster 39000B Lawnmower",  
  212. fuelEfficiency: "Moderate",  
  213. isVehicle: false,  
  214. price: 1020  
  215. }  
  216. ];  
  217. }  
  218. <!doctype html>  
  219. <html lang="en">  
  220. <head>  
  221. <title>Refactor Me</title>  
  222.   
  223. <script type="text/javascript" src="src/do-not-refactor/LawnmowerRepository.js"></script>  
  224. <script type="text/javascript" src="src/do-not-refactor/PhoneCaseRepository.js"></script>  
  225. <script type="text/javascript" src="src/do-not-refactor/TShirtRepository.js"></script>  
  226.   
  227. <script type="text/javascript" src="src/refactor-me/ProductDataRenderer.js"></script>  
  228. <script type="text/javascript" src="src/refactor-me/ProductDataConsolidator.js"></script>  
  229.   
  230. <link rel="stylesheet" type="text/css" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"></head>  
  231. <body>  
  232.   
  233.   
  234. <div style="max-width: 600px">  
  235. <div id="nzdProducts"></div>  
  236. <div id="usdProducts"></div>  
  237. <div id="euProducts"></div>  
  238. </div>  
  239.   
  240. <script type="text/javascript">  
  241. document.addEventListener("DOMContentLoaded"function () {  
  242. var p = new ProductDataRenderer();  
  243. p.render();  
  244. });  
  245. </script>  
  246. </body>  
  247. <!DOCTYPE html>  
  248. <html>  
  249. <head>  
  250. <meta charset="utf-8">  
  251. <title>RefactorMe Tests</title>  
  252. <link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.17.1.css">  
  253. </head>  
  254. <body>  
  255. <div id="qunit"></div>  
  256. <div id="qunit-fixture"></div>  
  257. <script src="http://code.jquery.com/qunit/qunit-1.17.1.js"></script>  
  258. <script src="src/tests.js"></script>  
  259. </body>  
  260. </html>  
  261. function TShirtRepository() {  
  262. }  
  263.   
  264. TShirtRepository.prototype.getAll = function () {  
  265. return [  
  266. {  
  267. id: 1,  
  268. colour: "Blue",  
  269. name: "Xamarin C# T-Shirt",  
  270. price: 15.0,  
  271. shirtText: "C#, Xamarin"  
  272. }, {  
  273. id: 2,  
  274. colour: "Black",  
  275. name: "New York Yankees T-Shirt",  
  276. price: 8.0,  
  277. shirtText: "NY"  
  278. }, {  
  279. id: 3,  
  280. colour: "Green",  
  281. name: "Disney Sleeping Beauty T-Shirt",  
  282. price: 10.0,  
  283. shirtText: "Mirror mirror on the wall..."  
  284. }  
  285. ];  
  286. }  
  287. function PhoneCaseRepository() {  
  288. }  
  289.   
  290. PhoneCaseRepository.prototype.getAll = function () {  
  291. return [  
  292. {  
  293. id: 1,  
  294. name: "Amazon Fire Burgundy Phone Case",  
  295. colour: "Burgundy",  
  296. material: "PVC",  
  297. targetPhone: "Amazon Fire",  
  298. price: 14.0  
  299. }, {  
  300. id: 2,  
  301. name: "Nokia Lumia 920/930/Icon Crimson Phone Case",  
  302. colour: "Red",  
  303. material: "Rubber",  
  304. targetPhone: "Nokia Lumia 920/930/Icon",  
  305. price: 10.0  
  306. }  
  307. ]  
  308. }

Answers (1)