Gửi bài viết tới BigCoin

CREDITS : Review Đánh Gia Code API của Credits

Đăng bởi: StevenPalley  - 05/05/2018 - 598 lượt xem
Chia sẻ
 

Phân tích kỹ thuật và đánh giá

Khái quát chung:

Tôi đã tiến hành đánh giá các code kể từ vài ngày qua để cung cấp cho nhóm các đề xuất và khuyến nghị của tôi sau khi kiểm toán nội bộ (biên dịch, cấu trúc và review code).

Công việc mà tôi đã làm được từ vài ngày qua hoàn toàn rất cần thiết để cung cấp phản hồi tốt hơn cho cộng đồng và cho nhóm phát triển cốt lõi. Tôi không được trả tiền để thực hiện đánh giá này và đó là nhiệm vụ của tôi với tư cách là cố vấn kỹ thuật của dự án để cung cấp cho bạn một cách công khai những suy nghĩ của tôi.

Trước hết, phân tích sau đây sẽ cho bạn thấy mô hình hóa của code để hiểu rõ hơn cấu trúc của API.

Mô-đun API của nền tảng CREDITS đã sẵn sàng cho tài khoản github CREDITS và bao gồm các tệp sau:

APIHandler.cpp

APIHandler.h

APIHandlerBase.cpp

APIHandlerBase.h

APIHandlerInterface.h

CallStats.cpp

CallStats.h

csconnector.cpp

DBHandlers.cpp

DBHandlers.h

DebugLog.h

Validation.h

ValidationTests.cpp

Trạng thái của code thực tế cho thấy không có sự hiện diện của giấy phép trong các header file. Tôi biết rằng đây không phải là phiên bản cuối cùng nhưng tôi khuyên bạn nên thêm nó càng sớm càng tốt.

 

Tôi nhận thấy ngôn ngữ trong code của bạn là bằng tiếng Nga, nhưng tôi đề nghị bạn nên dịch nó sang tiếng Anh, ngôn ngữ Shakespeare. Tuy nhiên tôi rất thích đọc nó bằng ngôn ngữ Moliere.

Với vai trò như một máy chủ API, code chủ yếu được chạy và biên dịch trên nền tảng Linux. Dựa trên thực tế này, tôi đã không tìm thấy bất kỳ Makefile nào để giúp tôi làm điều đó đúng cách. Tôi khuyên bạn nên tạo một Makefile được sử dụng để xây dựng các chương trình nhị phân từ mã nguồn và làm cho quy trình làm việc của bạn có thể tái sản xuất được.

Đối với phần xác thực, cấu trúc của code được triển khai dưới dạng macro. Mặc dù việc triển khai này mang lại khả năng thích ứng tuyệt vời, nhưng nó hy sinh rất nhiều khả năng hiểu và sẵn sàng. Sử dụng thư viện kiểm tra chuẩn có thể là một khởi đầu tốt nếu bạn định thay đổi nó.

Bạn cũng có thể tách Unit Test từ các tệp “prod”. Nó cho phép các cộng tác viên thêm các bài kiểm tra của riêng họ trong giai đoạn thử nghiệm mà bạn dự định chạy trong những ngày tới.

Tìm hiểu sâu hơn về từng file

Tôi đã phân tích từng file được trình bày một cách riêng biệt và mô hình hóa nó để cung cấp càng nhiều chi tiết càng tốt về kiến trúc được chọn bởi coreteam CREDITS.

APIHandler.cpp

#include “APIHandler.h”

#include “DebugLog.h”

#include “csconnector/csconnector.h”

#include “CallStats.h”

#include “Validation.h”

Biểu đồ của các header file trông như sau:

Namespace:

csconnector

csconnector::detail

Các chức năng:

VALIDATE (nguồn)

VALIDATE (mục tiêu)

VALIDATE (tiền tệ)

APIHandler.h

#include

#include “APIHandlerInterface.h”

Biểu đồ của các header file trông như sau:

 

 

Biểu đồ của các file này được bao gồm:

Các lớp code:

Lớp csconnector::APIHandler

Namespace:

csconnector

Nhận xét:

Header file mô tả các phương thức và tham số của chúng. Không có nhận xét nào khác có liên quan mà tôi nhận thấy

APIHandlerBase.cpp

#include “APIHandlerBase.h”

Biểu đồ của các header file được bao gồm trông như sau:

Các lớp:

struct csconnector::detail::APIRequestStatus

Namespace:

csconnector

csconnector::detail

Các biến (Variables):

APIRequestStatus csconnector::detail::statuses

[static_cast< size_t >(APIHandlerBase::APIRequestStatusType::MAX)]

Nhận xét:

Áp dụng chính xác các kiểu dữ liệu để giảm dung lượng bộ nhớ đã sử dụng khi gán trạng thái của một function call.

APIHandlerBase.h

#include “API.h”

Biểu đồ của các header file được bao gồm cho APIHandlerBase.h:

Biểu đồ các tệp, tệp này được bao gồm trong:

Các lớp:

struct csconnector::APIHandlerBase

Namespace:

csconnector

Nhận xét:

File header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan.

APIHandlerInterface.h

#include “API.h”
 #include “APIHandlerBase.h”

Biểu đồ của các header file được bao gồm cho APIHandlerBase.h:

 

Biểu đồ các tệp, tệp này được bao gồm trong:

Các lớp:

struct csconnector::APIHandlerInterface

Namespace:

сsconnector

Nhận xét:

File header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan.

CallStats.cpp

#include “CallStats.h”
 #include
 #include
 #include
 #include “DebugLog.h”

Biểu đồ của các header file được bao gồm cho CallStats.cpp:

Typedefs:

using csconnector::call_stats::Counter = std::atomic

using csconnector::call_stats::NumCallsPerCommand

 = std::array<Counter, NumCommands>

using csconnector::call_stats::NumCallsPerCommandStats

 = std::array<int, NumCommands>

Các chức năng:

NumCallsPerCommandStats csconnector::call_stats::get ()

void csconnector::call_stats::count (Commands command)

void csconnector::call_stats::clear ()

void csconnector::call_stats::start ()

void csconnector::call_stats::stop ()

Các biến:

constexpr size_t csconnector::call_stats::NumCommands

 = (size_t)Commands::Max

NumCallsPerCommand csconnector::call_stats

::numCallsPerCommand

std::chrono::steady_clock::time_point csconnector

::call_stats::lastUpdateTime = std::chrono::steady_clock::now()

std::thread csconnector::call_stats::thread

std::atomic_bool csconnector::call_stats::quit {false}

Nhận xét:

CallStats.h

#include <csconnector/csconnector.h>

Biểu đồ của các header files được bao gồm cho CallStats.cpp:

Biểu đồ các tệp, tệp này được bao gồm trong:

Namespace:

csconnector

csconnector::call_stats

Các chức năng:

void csconnector::call_stats::start ()

void csconnector::call_stats::stop ()

void csconnector::call_stats::count (Commands command)

Nhận xét:

File header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan.

csconnector.cpp

#include“csconnector/csconnector.h”

#include“DebugLog.h”

#include“APIHandler.h”

#include“DBHandlers.h”

#include“CallStats.h”

#include

#include

#include<thrift/protocol/TBinaryProtocol.h>

#include<thrift/transport/TServerSocket.h>

#include<thrift/transport/TBufferTransports.h>

#include<thrift/server/TThreadedServer.h>

Biểu đồ của các header file được bao gồm cho csconnector.cpp: 

Namespace:

csconnector

csconnector::detail

Typedefs:

typedef std::lock_guard< std::mutex > csconnector::detail::ScopedLock

Các chức năng:

void csconnector::detail::start (const Config &config)

void csconnector::detail::stop ()

void csconnector::start (const Config &config)

void csconnector::stop ()

Các biến:

td::unique_ptr< TThreadedServer > csconnector::detail::server = nullptr

std::mutex csconnector::detail::mutex

std::thread csconnector::detail::thread

Nhận xét:

DBHandlers.cpp

#include “DBHandlers.h”

#include <csdb/csdb.h>

#include “csconnector/csconnector.h”

#include

#include

Biểu đồ của các header file được bao gồm cho DBHandlers.cpp:

Namespace:

db_handlers

Typedefs:

Sử dụng db_handlers::PoolNumber = uint64_t

Các chức năng:

void db_handlers::init ()

void db_handlers::deinit ()

void db_handlers::BalanceGet (BalanceGetResult &_return, const Address &address, const Currency &currency)

void db_handlers::string_to_uuid (const std::string &uuid_str, uuid_t uuid)

bool db_handlers::GetTransaction (const TransactionId &transactionId, Transaction &transaction)

void db_handlers::TransactionGet (TransactionGetResult &_return, const TransactionId &transactionId)

void db_handlers::SubstituteTransactionHash (api::Transaction &transaction, const std::string &newHash)

Đó thực sự là một hack (ngôn ngữ lập trình).

std::string db_handlers::FormatTransactionHash (const std::string &poolHash, size_t transacionNumber)

void db_handlers::TransactionsGet (TransactionsGetResult &_return, const Address &address, const int64_t offset, const int64_t limit)

void db_handlers::PoolListGet (PoolListGetResult &_return, const int64_t offset, const int64_t limit)

void db_handlers::PoolGet (PoolGetResult &_return, const PoolHash &hash)

Nhận xét:

DBHandlers.h

#include “API.h”

Biểu đồ của các header file được bao gồm cho DBHandlers.h:

Biểu đồ các tệp, tệp này được bao gồm trong:

Namespace:

db_handlers

Các chức năng:

void db_handlers::init ()

void db_handlers::deinit ()

void db_handlers::BalanceGet (api::BalanceGetResult &_return, const api::Address &address, const api::Currency &currency)

void db_handlers::TransactionGet (api::TransactionGetResult &_return, const api::TransactionId &transactionId)

void db_handlers::TransactionsGet (api::TransactionsGetResult &_return, const api::Address &address, const int64_t offset, const int64_t limit)

void db_handlers::PoolListGet (api::PoolListGetResult &_return, const int64_t offset, const int64_t limit)

void db_handlers::PoolGet (api::PoolGetResult &_return, const api::PoolHash &hash)

Nhận xét:

File header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan.

DebugLog.h

#include

Biểu đồ của các header file được bao gồm cho for DebugLog.h:

Biểu đồ các tệp, tệp này được bao gồm trong:

Macros:

#define DEBUG_LOG

Các chức năng:

void Log ()

template

void Log (T t, Args… args)

template

void DebugLog (T t, Args… args)

Macros:

DEBUG_LOG

#define DEBUG_LOG

Các chức năng:

DebugLog()

template

void DebugLog ( T t,Args… args)

Call graph:

Biểu đồ của function call:

Log() [1/2]

void Log

Biểu đồ của function call:

Log() [2/2]

template

void Log(T t,

Args… args

)

Call graph:

Nhận xét:

Không có nhận xét liên quan ở giai đoạn phát triển này.

Validation.h

#include

#include

#include

#include

#include

Biểu đồ của các header file được bao gồm cho Validation.h:

Biểu đồ các tệp, tệp này được bao gồm trong:

Các lớp:

struct validation::Validator< T >

struct validation::StringLengthValidator< O >

struct validation::StringLengthValidator< O >::Int2Type< I >

struct validation::NonEmptyValidator

struct validation::NonZeroValidator

struct validation::EqualToValidator< T >

struct validation::CustomValidator< T >

struct validation::ValidatorBuilder< T >

struct validation::Dummy

struct validation::ValidationTraits< T, D >

Namespace:

Validation code

Macros:

#define VALIDATE_BEGIN_(C, D)

#define VALIDATE_BEGIN(C) VALIDATE_BEGIN_(C, Dummy)

#define VALIDATE_BEGIN_EX(C, D) struct D{}; VALIDATE_BEGIN_(C, D)

#define VALIDATE(F)

#define VALIDATE_END()

Typedef:

Sử dụng xác thực::FieldId = uint8_t

Sử dụng xác thực::ValidatorId = uint8_t

Sử dụng xác thực::ValidationResult = std::tuple< FieldId, ValidatorId >

Kiểu dữ liệu Enum:

enum validation::StringLengthOperation { validation::Less, validation::More, validation::Equal }

Các biến:

constexpr ValidationResult validation::NoError = { 0, 0 }

Macros:

Xác thực

#define VALIDATE ( F )

Macro definition:

 

 

Nhận xét:

file header mô tả các phương thức và tham số của chúng. Không có nhận xét liên quan ở giai đoạn phát triển này.

ValidationTests.cpp

#include “Validation.h”

#include

Biểu đồ của các header file được bao gồm cho ValidationTests.cpp:

Các lớp:

struct Test

Các chức năng:

VALIDATE (x).EqualTo(1)

VALIDATE (s).Length< More >(2)

void validationTest ()

Functions:

VALIDATE() [1/2]

VALIDATE ( x )

VALIDATE() [2/2]

VALIDATE ( s )

validationTest()

void validationTest ()

Biểu đồ cuả function call:

Nhận xét:

Kết luận

Mặc dù nhận thấy một số cải tiến cho code vẫn cần thiết nhưng cấu trúc của code dường như được thiết kế để có khả năng mở rộng. Là cố vấn kỹ thuật của Credit, tôi cảm thấy tự tin về dự án và những gì nhóm nghiên cứu đang cố gắng đạt được.

Thật vậy, xây dựng một giao thức mới từ đầu sau một cộng đồng mạnh mẽ cần có thời gian. Nhóm cốt lõi sẽ xuất bản từng phần code trên GitHub để các thành viên cộng đồng có thể nhận được phản hồi. Nhóm CREDITS đã bắt đầu chia sẻ một phần của code và họ sẽ tiếp tục làm điều đó trong những ngày tới.

Cộng đồng sẽ được tham gia nhiều hơn khi một phiên bản ổn định đã sẵn sàng để được triển khai. Ý kiến cá nhân, tôi hiếm khi thấy trong không gian cộng đồng blockchain có một nhóm gần gũi với cộng đồng của họ như Credit.

Kiên nhẫn dẫn đến sự cứu rỗi, vội vàng dẫn đến sự đau khổ. Ai muốn làm những điều vĩ đại thì phải suy nghĩ sâu sắc về các chi tiết bởi vì những tai họa đang đứng ở đằng sau. Hãy kiên nhẫn chờ đợi cuộc cách mạng sắp bùng nổ.

Nguồn: medium.com

Bạn đang đọc bài: CREDITS : Review Code API

Biên soạn: https://bigcoinvietnam.com/

Tags
Chia sẻ  
  
  
  
100% Rating
Điểm: 5 / 5
2 Bình chọn

StevenPalley

Đội ngũ dịch bài từ các trang web uy tín ở nước ngoài. Với sự đánh giá cao của các chuyên gia

Có thể bạn quan tâm

Bigcoin Việt Nam - Phân tích đầu tư Bitcoin, Ethereum, đầu tư ICO theo 39 tiêu chí phân tích công nghệ