2021 0217(水)TIL-280宝くじタスクstpe 1 PR,MVC
Today I Learned
改造する
「ループのジャンクコード」は「ループしないCLINEコード」より良いと思うので、フェアシンボルとともにターゲットを実現する機能に焦点を当てました.実装が完了すると,再編成を行い,コードを少し分離すればMVCモードを適用でき,MVCモードを標榜して再編成を行った.
Model
import Ticket from './Ticket.js';
export default function Lotto() {
const init = () => {
this.tickets = [];
};
this.getTicket = () => {
this.tickets.push(new Ticket());
};
this.putLottoNumbers = () => {
return this.tickets.map((ticket) => ticket.numbers);
};
init();
}
import { getRandomNumber } from '../utils/getRandomNumber.js';
export default function Ticket() {
const init = () => {
this.numbers = getLottoNumber();
this.profit = 0;
};
const getLottoNumber = () => {
const lottoNumbers = new Set();
while (lottoNumbers.size < 6) {
lottoNumbers.add(getRandomNumber(1, 45));
}
return [...lottoNumbers].sort((a, b) => a - b);
};
init();
}
機能が最初に実現されたとき、Lotto
には、現在Ticket
に分離されているすべての部分が含まれていた.しかし,Lotto Instanceを作成すると不要な部分が一緒に生成され,1つのモデルがあまりにも多くの役割を果たす可能性があるので分離した.View
import { $ } from '../utils/querySelector.js';
import {
showElement,
hideElement,
disabledElement,
} from '../utils/setProperty.js';
const $purchaseResultSectionRowAlign = $('#purchase-result-section__row-align');
const $purchaseResultSectionColAlign = $('#purchase-result-section__col-align');
const lottoTicketIconTemplate = () => {
return `<span class="purchase-result-section__lotto-icon mx-1 text-4xl">
🎟️
</span>`;
};
const lottoTicketDetailTemplate = (lottoNumber) => {
return `<div class="d-flex">
${lottoTicketIconTemplate()}
<span class="mx-1 mt-1 text-xl">${lottoNumber}</span>
</div>`;
};
export const renderPurchaseResultSection = (
amountOfLottoTicket,
lottoNumbers,
) => {
const $purchaseResultSection = $('#purchase-result-section');
const $purchaseResultSectionLabel = $('#purchase-result-section__label');
const $purchasePriceInputFormButton = $('#purchase-price-input-form__button');
$purchaseResultSectionLabel.innerText = `총 ${amountOfLottoTicket}개를 구매하였습니다.`;
$purchaseResultSectionRowAlign.innerHTML = lottoTicketIconTemplate().repeat(
amountOfLottoTicket,
);
$purchaseResultSectionColAlign.innerHTML = lottoNumbers
.map((lottoNumber) => lottoTicketDetailTemplate(lottoNumber.join(', ')))
.join('');
disabledElement($purchasePriceInputFormButton);
showElement($purchaseResultSection);
};
export const renderPurchaseResultSectionColAlign = () => {
showElement($purchaseResultSectionColAlign);
hideElement($purchaseResultSectionRowAlign);
};
export const renderPurchaseResultSectionRowAlign = () => {
showElement($purchaseResultSectionRowAlign);
hideElement($purchaseResultSectionColAlign);
};
レンダリング画面の要素が分離されています.Controller
import { $ } from '../utils/querySelector.js';
import { ERR_MESSAGE, VALUE } from '../utils/constant.js';
import { renderPurchaseResultSection } from '../view/viewPurchaseResultSection.js';
export const handlePurchasePriceInput = (lotto) => {
const purchasePrice = $('#purchase-price-input-form__input').value;
if (purchasePrice < VALUE.LOTTO.TICKET_PRICE) {
return alert(ERR_MESSAGE.LOTTO.INVALID_PRICE);
}
const numberOfLottoTicket = Math.floor(
purchasePrice / VALUE.LOTTO.TICKET_PRICE,
);
for (let i = 0; i < numberOfLottoTicket; i++) {
lotto.getTicket();
}
renderPurchaseResultSection(numberOfLottoTicket, lotto.putLottoNumbers());
};
import {
renderPurchaseResultSectionColAlign,
renderPurchaseResultSectionRowAlign,
} from '../view/viewPurchaseResultSection.js';
export const handlePurchaseResultToggle = ({ target }) => {
return target.checked
? renderPurchaseResultSectionColAlign()
: renderPurchaseResultSectionRowAlign();
};
ハンドル関数を分離しました.MV* ???
では、なぜMVCモードのコントローラに加わるのでしょうか.ソフトウェアの規模が拡大するにつれて、モデルとビューが必要とすることが多くなり、それらの役割を割り当て、割り当てるためにMV+@が必要となり、そのうちの1つはControllerfmfを使用するMVCである.コントローラはモデルとビューを調整し、現在は大きなソフトウェアではありませんが、ソフトウェアの規模が拡大するにつれて、コントローラが処理しなければならないことが多くなり、コントローラが複雑になる可能性があります.
上のモジュールにMVCがついているかどうかはわかりませんができるだけ早くコメントのフィードバックを得たいです.
Thanks to pair:記号(@0 imbean 0)
Today Commit Review
Today Review
Reference
この問題について(2021 0217(水)TIL-280宝くじタスクstpe 1 PR,MVC), 我々は、より多くの情報をここで見つけました https://velog.io/@yujo/TIL-280-lottoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol