軟件設計與編程實踐總結

問題描述

大三了,一年一度的軟件設計與編程實踐到來了。javascript

繼今年的軟件工程實驗以後第二個大實驗;要求相似,多用戶登陸的複雜系統,軟件工程實驗要求五個下午,本實驗要求八個上午。java

感謝Spring Data JPA,此框架真的是實驗利器,大大提升了開發效率。git

感謝團隊,感謝潘老師。要不我可能也要和個人同窗同樣一塊兒學Tomcat,寫Servlet,生連JDBC,手寫SELECT,最後把實驗寫黃。github

clipboard.png

需求描述

三個角色:貨主、司機、管理員。npm

clipboard.png

管理員負責維護基礎信息,就是基礎模塊的增刪改查,就是實體有點多。編程

clipboard.png

主要的就是業務流程:api

貨主在平臺發起訂單,司機能綜合查詢相關訂單。框架

司機進行搶單,一個單能夠被多個司機搶,而後貨主選擇我這批貨由哪一個司機進行承運,並進行付款。ide

司機能更改運輸狀態,當貨物到站時,貨主確認後,平臺將通過抽成的錢轉給司機。grunt

問題

Spring Data JPA

@RepositoryRestResource(path = "Tax")
public interface TaxRepository extends JpaRepository<Tax, Long> {
    Tax findByMinPriceLessThanAndMaxPriceGreaterThanEqual(BigDecimal priceMin, BigDecimal priceMax);
}

直接在倉庫接口上加註解,而後就在當前的path上生成了增刪改查、分頁、排序等接口。

這個框架用是很好用,就是有一個問題,查詢數據時後臺不序列化id

id: 1
name: zhangsan
age: 18

假如數據表中由這樣一個實體,若是調用getAll接口的話,返回的倒是這樣的數據。

[{
    name: zhangsan,
    age: 18
}]

沒有id在首頁顯示是沒問題的,可是若是編輯的時候怎麼辦呢?

查找官方文檔,實現RepositoryRestConfigurer接口,在configureRepositoryRestConfiguration中配置爲哪一個實體暴露id

@Configuration
public class CustomRestConfiguration implements RepositoryRestConfigurer {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.exposeIdsFor(GoodCategory.class)
                .exposeIdsFor(OrderDetail.class)
                .exposeIdsFor(Orders.class)
                .exposeIdsFor(Payment.class)
                .exposeIdsFor(Price.class)
                .exposeIdsFor(Tax.class)
                .exposeIdsFor(User.class)
                .exposeIdsFor(Vehicle.class);
    }
}

地圖

clipboard.png

咱們設計的是貨主發起訂單時的出發地與目的地都是在百度地圖上選的。

因此,須要解決三個問題:

  1. 定位當前位置,點開地圖時默認是這個位置。
  2. 用戶選擇了位置,我怎麼知道選的是哪一個地方?
  3. 計算出發地與目的地之間的距離,用於計算總價。

設計

和以前寫定時任務不知道本初子午線同樣,解決地圖問題的時候,又暴露了我地理沒學好的缺陷。

一直想怎麼存儲位置呢?後來學習了一下百度地圖的開發文檔發現,經緯度是最好的解決方法。

經緯度惟一地標識一個位置,咱們能夠根據經緯度再去百度查這個經緯度是一個什麼地點。

最後就是這麼設計的,先選出經緯度,而後前臺去根據當前選中的經緯度去百度要數據,這個經緯度對應的是哪一個市哪一個區那條街?同時根據起點與終點調百度的接口查詢距離是多少。

private String startPlace;                // 起點

private String endPlace;                  // 終點

private Float startLongitude;             // 起點經度

private Float startLatitude;              // 起點緯度

private Float endLongitude;               // 終點經度

private Float endLatitude;                // 終點緯度

private Float distance;                   // 運輸距離

定位

百度地圖開放平臺上的DEMO特別詳細,有四種定位方式肯定當前用戶在哪,咱們採用的是根據ip的定位方式,雖然距離不太精確,但對於實驗來講足夠了。

clipboard.png

算距離

clipboard.png

發現百度地圖的api和我想象中的有差距,點開獲取兩點間的距離,沒想到居然是勾股定理。

綜合查詢

司機查訂單的時候,用到了團隊的核心庫。

想把這個YunzhiService的實例放到個人應用上下文中。

@Configuration
public class BeanConfig {

    @Bean
    public YunzhiService yunzhiService() {
        return new YunzhiServiceImpl();
    }
}

總結

棄用

雖然不太願意認可,可是當我幫同窗裝環境的時候,npm提示grunt不推薦使用。新技術將至。

README

文檔對於一個項目的參考價值來講十分重要,我以前在Github上看到過很多開源的項目,我看過之後以爲毫無參考價值,一個文檔都不寫,這個項目開源對他人來講有何意義嗎?

物流運輸平臺 - Github

clipboard.png

深覺文檔的價值,之後開源的每一個項目,無論代碼如何,在至少保證文檔齊全。至少保證我這個項目開源,對他人有意義!

相關文章
相關標籤/搜索