Skip to content

Quy tắc viết mã nguồn OpenCPS

Tạ Tuấn Anh edited this page Mar 13, 2016 · 10 revisions

Đây là trang mô tả quy ước code theo chuẩn dự án OpenCPS!

1. Quy tắc đặt tên của dự án

Đối với gói (package)

Cách đặt tên gói cho một thành phần có tên module
Tiền tố: org.opencps.module
Thành phần backend:

  • org.opencps.module.dao chứa file service.xml
  • org.opencps.module.model chứa các đối tượng Entity
  • org.opencps.module.service chứa các API service
  • org.opencps.module.util chứa các lớp tiện ích Thành phần Frontend:
  • org.opencps.module.ui chứa các action xử lý giao diện frontend
  • org.opencps.module.admin chứa các action giao diện quản trị nằm trong control panel của Liferay
  • org.opencps.module.samples chứa giao diện phục vụ test các API của mô đun

Tất cả các ký tự tên của packet phải đưọc viết thường.

Ví dụ:

org.opencps.usermgt.dao -> Đúng
org.opencps.user_mgt.dao -> Sai
org.opencps.usermgt.Dao -> Sai 

Đối với lớp (class)

Tên của class đặt sử dụng theo cú pháp [Camel Case] (https://en.wikipedia.org/wiki/CamelCase). Sử dụng danh từ để đặt tên cho các class. Ví dụ:

class Customer
class Account

Interfaces: Có thế sử dụng cú pháp [Camel Case] (https://en.wikipedia.org/wiki/CamelCase).

Class = UserImpl, Interface = User

Đối với biến (Variables)

Đặt tên biến theo quy tắc mix case, viết thường ký hiệu đầu tiên của biến, và viết hoa ký tự tiếp theo. Ví dụ:

String firstName
int orderNumber

Đối với hằng (Constants)

2. Quy tắt viết code Java

Phần Backend của OpenCPS được viết bằng cách sử dụng bộ công cụ Service Builder của Liferay. Các entity dữ liệu phải được khai báo trong service.xml. Một entity dữ liệu sẽ cần được khai báo với đầy đủ các thành phần như ví dụ sau

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.2.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_6_2_0.dtd">
<service-builder package-path="org.opencps.module">

<entity name="EntityName" local-service="true" remote-service="true" 
	data-source="opencpsdatasource"	table="opencps_entityname">
	
	<!-- PK fields -->

	<column name="entityNameId" type="long" primary="true" />

	<!-- Audit fields -->

	<column name="companyId" type="long" />
	<column name="groupId" type="long" />
	<column name="userId" type="long" />
	<column name="createDate" type="Date" />
	<column name="modifiedDate" type="Date" />

	<!-- Attribute fields: attribute of entity -->
	
	<!-- Relationships: attribute of entity -->

	<!-- Order: sorting by columns -->

	<!-- Finder methods: row filters -->

</entity>

</service-builder>

Khai báo các ràng buộc dữ liệu cần thiết vào têp portlet-model-hints.xml như ví dụ sau

<?xml version="1.0"?>
<model-hints>
<hint-collection name="TEXTAREA">
	<hint name="display-height">105</hint>
	<hint name="display-width">500</hint>
	<hint name="max-length">4000</hint>
</hint-collection>
<model name="org.opencps.datamgt.model.DictCollection">
	<default-hints>
		<hint name="display-width">150</hint>
	</default-hints>
	<field name="dictCollectionId" type="long" />
	<field name="companyId" type="long" />
	<field name="groupId" type="long" />
	<field name="userId" type="long" />
	<field name="createDate" type="Date" />
	<field name="modifiedDate" type="Date" />
	<field name="collectionCode" type="String">
		<hint name="max-length">100</hint>
	</field>
	<field name="collectionName" type="String" localized="true">
		<hint name="max-length">255</hint>
	</field>
	<field name="description" type="String">
		<hint-collection name="TEXTAREA" />
	</field>
</model>
</model-hints>

Với mỗi entity dữ liệu, cần phải tạo các hàm truy xuất dữ liệu CRUD theo nguyên tắc đặt tên hàm như sau

  • C: EntityName addEntityName(...)
  • U: EntityName updateEntityName(...)
  • D: void deleteEntityName(...)
  • R: EntityName getEntityName(...)
  • R: List<EntityName> getEntityNames(...)

3. Quy tắt viết code JSP

4. Quy tắc khai báo Import

5. Quy tắc quy cách trình bày code của dự án

6. Quy tắc sử dụng copyright

Ở đầu mỗi file mã nguồn, cần đưa thông tin mô tả giấy phép như sau:

OpenCPS is the open source Core Public Services software
Copyright (C) 2016-present OpenCPS community

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

Clone this wiki locally