亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

軟件工程:Kiss原則,復(fù)雜事情簡(jiǎn)單做,是重要的能力

admin
2023年7月12日 8:56 本文熱度 1821

軟件開發(fā)是一項(xiàng)復(fù)雜的系統(tǒng)工程,隨著時(shí)間的演進(jìn),復(fù)雜度會(huì)自然的增長(zhǎng)。

如果想要避免系統(tǒng)內(nèi)熵的過(guò)快增長(zhǎng),就需要我們?cè)谘邪l(fā)過(guò)程中,刻意的做減法,來(lái)保持系統(tǒng)的簡(jiǎn)單性和可靠性。

KISS原則就是一條可讓系統(tǒng)保持簡(jiǎn)單的行動(dòng)指導(dǎo)原則。

那什么是KISS原則呢?下面我們具體看看吧。

Part1什么是KISS原則

KISS原則指的是“保持簡(jiǎn)單原則”(Keep It Simple, Stupid)。

“保持簡(jiǎn)單”是指在設(shè)計(jì)、開發(fā)、實(shí)現(xiàn)和管理過(guò)程中,應(yīng)該采用簡(jiǎn)單的方法和策略來(lái)解決問(wèn)題,以便更容易理解、實(shí)現(xiàn)、維護(hù)和使用。

KISS原則的基本思想是:在設(shè)計(jì)或解決問(wèn)題時(shí),應(yīng)該盡可能地簡(jiǎn)化,不要過(guò)度復(fù)雜化。 這是因?yàn)楹?jiǎn)單的解決方案通常更可靠,更易于理解和維護(hù),并且更具可擴(kuò)展性。

這個(gè)原則最初用于設(shè)計(jì)和工程領(lǐng)域,但現(xiàn)在已經(jīng)成為了一個(gè)廣泛應(yīng)用于各種領(lǐng)域的管理和生活原則。

Part2KISS原則的最佳實(shí)踐

以下是KISS原則的最佳實(shí)踐:

  • 避免過(guò)度設(shè)計(jì):不要試圖預(yù)測(cè)未來(lái)可能發(fā)生的情況,只關(guān)注當(dāng)前需求,盡量避免過(guò)度設(shè)計(jì)。

  • 盡量簡(jiǎn)化代碼:使用簡(jiǎn)單的代碼結(jié)構(gòu)和算法,盡可能避免復(fù)雜的嵌套和邏輯。

  • 保持一致性:在代碼中使用統(tǒng)一的命名規(guī)則、代碼格式和注釋,保持代碼風(fēng)格的一致性。

  • 避免重復(fù)代碼:避免在代碼中重復(fù)相同的邏輯,盡量將相同的代碼封裝成方法或類。

  • 提高代碼可讀性:使用有意義的變量名、方法名和注釋,使代碼更容易理解和閱讀。

  • 不要過(guò)早地進(jìn)行優(yōu)化:在代碼編寫的早期,不要過(guò)早地考慮性能優(yōu)化,盡可能使代碼易于理解和維護(hù)。

  • 保持代碼精簡(jiǎn):避免使用過(guò)多的庫(kù)和框架,只使用必要的工具和庫(kù),減少代碼的復(fù)雜性和依賴關(guān)系。

總之,遵循KISS原則的這些最佳實(shí)踐建議,是要保持代碼盡可能的簡(jiǎn)單、易于理解和容易維護(hù)。

Part3KISS原則的反模式

以下是KISS原則的常見幾個(gè)反模式:

  • 過(guò)度工程化:過(guò)度設(shè)計(jì)和過(guò)度開發(fā)會(huì)導(dǎo)致代碼復(fù)雜性增加,影響代碼的可讀性和可維護(hù)性。

  • 濫用設(shè)計(jì)模式:使用過(guò)多的設(shè)計(jì)模式會(huì)導(dǎo)致代碼復(fù)雜性增加,難以理解和維護(hù)。

  • 復(fù)制黏貼代碼:復(fù)制黏貼代碼可能導(dǎo)致代碼重復(fù)和冗余,增加代碼復(fù)雜性,難以維護(hù)。

  • 過(guò)早優(yōu)化:在代碼編寫早期過(guò)度關(guān)注性能優(yōu)化,可能會(huì)影響代碼的可讀性和可維護(hù)性,同時(shí)可能導(dǎo)致不必要的代碼復(fù)雜性。

  • 不遵循命名規(guī)范:命名不規(guī)范、不統(tǒng)一的變量和方法名可能會(huì)導(dǎo)致代碼難以理解和維護(hù)。

  • 不遵循單一職責(zé)原則:一個(gè)類或方法負(fù)責(zé)過(guò)多的功能,會(huì)導(dǎo)致代碼復(fù)雜性增加,難以理解和維護(hù)。

  • 濫用注釋:過(guò)多的注釋可能會(huì)導(dǎo)致代碼復(fù)雜性增加,同時(shí)也可能難以維護(hù)。

總之,KISS原則的常見反模式都是導(dǎo)致代碼復(fù)雜性增加、難以理解和維護(hù)的原因,應(yīng)該盡可能避免。

Part4一個(gè)經(jīng)典反例

以下是一個(gè)過(guò)度工程化的代碼案例,其違反KISS原則,具體Java代碼如下:

public abstract class AbstractBaseDao<T> implements BaseDao<T> {

    private EntityManager entityManager;
    private Class<T> entityClass;

    public AbstractBaseDao(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected EntityManager getEntityManager() {
        if (entityManager == null) {
            entityManager = Persistence.createEntityManagerFactory("persistence-unit").createEntityManager();
        }
        return entityManager;
    }

    @Override
    public T findById(Long id) {
        return getEntityManager().find(entityClass, id);
    }

    @Override
    public List<T> findAll() {
        CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
        CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(entityClass);
        Root<T> root = criteriaQuery.from(entityClass);
        criteriaQuery.select(root);
        return getEntityManager().createQuery(criteriaQuery).getResultList();
    }

    @Override
    public void save(T entity) {
        getEntityManager().getTransaction().begin();
        getEntityManager().persist(entity);
        getEntityManager().getTransaction().commit();
    }

    @Override
    public void update(T entity) {
        getEntityManager().getTransaction().begin();
        getEntityManager().merge(entity);
        getEntityManager().getTransaction().commit();
    }

    @Override
    public void delete(T entity) {
        getEntityManager().getTransaction().begin();
        getEntityManager().remove(entity);
        getEntityManager().getTransaction().commit();
    }

    @Override
    public void deleteById(Long id) {
        T entity = findById(id);
        if (entity != null) {
            delete(entity);
        }
    }
}

public interface BaseDao<T> {

    T findById(Long id);

    List<T> findAll();

    void save(T entity);

    void update(T entity);

    void delete(T entity);

    void deleteById(Long id);
}

public class UserDaoImpl extends AbstractBaseDao<User> implements UserDao {

    public UserDaoImpl() {
        super(User.class);
    }

    @Override
    public List<User> findByName(String name) {
        CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
        CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
        Root<User> root = criteriaQuery.from(User.class);
        criteriaQuery.select(root);
        criteriaQuery.where(criteriaBuilder.equal(root.get("name"), name));
        return getEntityManager().createQuery(criteriaQuery).getResultList();
    }
}

public interface UserDao extends BaseDao<User> {

    List<User> findByName(String name);
}

在這個(gè)例子中,實(shí)現(xiàn)了一個(gè)通用的 BaseDao 接口和抽象類 AbstractBaseDao,其中 AbstractBaseDao 是一個(gè)抽象類,包含了基本的 CRUD 操作,而 UserDaoImpl 是一個(gè)具體實(shí)現(xiàn)類,實(shí)現(xiàn)了 UserDao 接口,通過(guò)繼承 AbstractBaseDao 來(lái)實(shí)現(xiàn)對(duì) User 對(duì)象的數(shù)據(jù)操作。

雖然這種方式可以實(shí)現(xiàn)基本的數(shù)據(jù)操作,但是通過(guò)抽象類和接口的方式,增加了代碼的復(fù)雜性和抽象程度,代碼中的 EntityManager、CriteriaBuilder 等 API 的使用也增加了代碼的復(fù)雜性。這種過(guò)度工程化的代碼實(shí)現(xiàn)方式會(huì)導(dǎo)致代碼不易于理解和維護(hù),同時(shí)增加了開發(fā)時(shí)間和成本。

如何改進(jìn)以上代碼呢?

為了符合 KISS 原則,可以對(duì)以上代碼進(jìn)行簡(jiǎn)化和改進(jìn),以下是改進(jìn)后的 Java 代碼:

public class UserDao {

    private EntityManager entityManager;

    public UserDao(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public User findById(Long id) {
        return entityManager.find(User.class, id);
    }

    public List<User> findAll() {
        String jpql = "select u from User u";
        TypedQuery<User> query = entityManager.createQuery(jpql, User.class);
        return query.getResultList();
    }

    public void save(User user) {
        entityManager.getTransaction().begin();
        entityManager.persist(user);
        entityManager.getTransaction().commit();
    }

    public void update(User user) {
        entityManager.getTransaction().begin();
        entityManager.merge(user);
        entityManager.getTransaction().commit();
    }

    public void delete(User user) {
        entityManager.getTransaction().begin();
        entityManager.remove(user);
        entityManager.getTransaction().commit();
    }

    public void deleteById(Long id) {
        User user = findById(id);
        if (user != null) {
            delete(user);
        }
    }

    public List<User> findByName(String name) {
        String jpql = "select u from User u where u.name = :name";
        TypedQuery<User> query = entityManager.createQuery(jpql, User.class);
        query.setParameter("name", name);
        return query.getResultList();
    }
}

在這個(gè)例子中,我們?nèi)サ袅顺橄箢惡徒涌诘膶哟?,?UserDao 定義為一個(gè)具體的類,其中包含了所有 User 對(duì)象的數(shù)據(jù)操作,同時(shí)去掉了 CriteriaBuilder 等 API 的使用,簡(jiǎn)化了代碼的復(fù)雜性。

同時(shí),我們將 EntityManager 對(duì)象通過(guò)構(gòu)造函數(shù)傳入 UserDao 中,這樣可以更靈活地管理 EntityManager 對(duì)象的生命周期,避免在每個(gè)方法中都創(chuàng)建 EntityManager 對(duì)象。在每個(gè)數(shù)據(jù)操作方法中,我們也盡量避免了使用過(guò)多的 JPA API,采用了更簡(jiǎn)潔的 JPQL 語(yǔ)句來(lái)完成數(shù)據(jù)操作。

這樣的代碼更易于理解和維護(hù),同時(shí)也減少了代碼的復(fù)雜性,更符合 KISS 原則。

Part5最后

以上,是關(guān)于KISS原則的意義,最佳實(shí)踐經(jīng)驗(yàn)和常見反模式的簡(jiǎn)單的總結(jié),希望對(duì)你有所啟發(fā)或幫助。

KISS原則不僅僅是一條軟件設(shè)計(jì)的指導(dǎo)原則,其也同樣使用于我們的生活和工作中。保持簡(jiǎn)單,不要有太多的技巧,可能是做事最高效和最有效的方法。

將事情做復(fù)雜是一個(gè)自然的過(guò)程,而將復(fù)雜的事情做簡(jiǎn)單,則是一項(xiàng)關(guān)鍵的能力。

保持簡(jiǎn)單,是一個(gè)熵減的過(guò)程。


該文章在 2023/7/12 8:56:09 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved