Refactor

constraint(NoSQL, SQL)

what is the object you are tramsform?

解耦/定義每個 folder/function 的功能

User Side(API)

Service(Business Logic)

Repository( DB)

API Server

Why?

 

- interface(input && output)

-  resource check or not

讓每個 function 專注在完成某件事

讓每個 function 專注在完成某件事

User Side(API)

提供接口給對外的使用者

為了確保 transaction,要思考什麼是一個 api 可以完成的邏輯

 

GraphQL 降低了前後端溝通的耦合

 

Service(Business Logic)

基於商業模式,會更在乎跟其他 domain 的交互關係

input 的 interface 應該會更有目的性

Repo

面向的是 Third Party 或 DB

提供最通用的介面 通常就是 CRUD

例如 update 不會特別指定哪個欄位可以 update 哪個不行

service

input 基於目的性

output

對於 input 的來源不需要特別去檢查()

Repo

get

set

input id

output dto(using dto mapper)

input dto

output dto(using dto mapper)

export class Network {
	static LIVE_CHECK_INTERVAL = 300000;
	id: string = '';
	status: NetworkStatus = NetworkStatus.NOT_DEPLOYED;
	...
	serviceEdges: ServiceEdge[] = [];
	createdAt: Date = new Date();
	updatedAt: Date = new Date();

	constructor(input: Partial<Network>) {
		Object.assign(this, input);
	}

	setStatus(
		deviceMesh: boolean,
		serviceEdges: ServiceEdge[],
		dataFetchedAt: Date,
	) {
		// some logic
	}
}

Model

Service

@Injectable()
export class NetworkService implements INetworkService {
	private readonly logger = new Logger(NetworkService.name);
	constructor(
		private readonly networkRepository: NetworkRepository,
		private readonly serviceEdgeService: ServiceEdgeService,
	) {}

	#generateValidationCode(): string {
		return generateUUID();
	}

	#generateNetworkId(): string {
		return generateUUID();
	}

	async getNetwork(id: string) {
		const network = await this.networkRepository.findById(id);
		if (!network) {
			throw new NotFoundException(`Network with id ${id} not found`);
		}
		const serviceEdges =
			await this.serviceEdgeService.getServiceEdgesByNetworkId(id);

		network.serviceEdges = serviceEdges;
		return network;
	}

UI component

headless UI

state query

Text

有時候太久沒寫前端會忘記 react 配 typescript 該怎麼寫有點煩,筆記一下

const Table: React.FC<TableProps> = (props) => {
  return (
  ...
  )
}

定義 component 的方式

const Table = <T extends {}>(props: TableProps): JSX.Element => {
  return (
  ...
  )
}
const Table = <T extends {}>(props: TableProps): JSX.Element => {
  return (
	<TableRowExpansion<T> />
  )
}

如果下面的 component 也是 generic

refactor legacy code

By Jay Chou

refactor legacy code

  • 56