TODO bình luận với thời hạn?


51

Lý lịch

Tôi đang làm việc trong một nhóm đang tìm cách triển khai các triển khai không thời gian chết. Chúng tôi đang lên kế hoạch sử dụng chiến lược triển khai xanh / xanh để đạt được điều này. Một trong những điều tôi nhận ra khi thực hiện nghiên cứu là mức độ phức tạp của việc thay đổi cơ sở dữ liệu. Một thao tác đơn giản như đổi tên một cột có thể mất 3 chu kỳ phát hành đầy đủ cho đến khi hoàn thành!

Dường như với tôi, việc triển khai đầy đủ thay đổi cần nhiều chu kỳ phát hành mang lại rất nhiều khả năng cho lỗi của con người. Trong bài viết được liên kết, nó cho thấy các thay đổi mã là cần thiết cho 2 bản phát hành và di chuyển cơ sở dữ liệu là cần thiết cho 3 bản phát hành.

Thứ tôi đang tìm kiếm

Hiện tại, nếu chúng ta muốn nhớ làm gì đó, chúng ta có thể tạo một vé trong hệ thống quản lý vấn đề của mình, điều này tạo ra sự lộn xộn và cũng có thể được quản lý chuyển sang chạy nước rút sau hoặc tồn đọng bởi quản lý; hoặc chúng ta có thể tạo một bình luận TODO, có lẽ sẽ bị lãng quên hoàn toàn.

Điều tôi đang tìm kiếm là một cách mà một bình luận TODO có thể có thời hạn cuối cùng và hệ thống Tích hợp liên tục của chúng tôi (hiện tại chưa quyết định mà chúng tôi sẽ sử dụng) sẽ từ chối bản dựng nếu hết thời hạn này.

Ví dụ: nếu chúng tôi đổi tên một cột, chúng tôi có thể tạo di chuyển ban đầu cho cột đó và sau đó hai nhận xét TODO để đảm bảo rằng hai di chuyển còn lại được tạo:

// TODO by v55: Create migration to move constraints to new column, remove references to old column in app
// TODO by v56: Create migration to drop old column

Điều này có vẻ khá đơn giản để thực hiện, nhưng tôi tự hỏi nếu một cái gì đó như thế này đã tồn tại, bởi vì tôi không muốn phát minh lại bánh xe.

Suy nghĩ thêm

Tôi cảm thấy mình có thể đang gặp phải vấn đề XY ở đây, vì việc triển khai cuộn và triển khai xanh / xanh được coi là cách thực hành tốt nhất, có vẻ lạ là tôi không thể tìm ra giải pháp giúp cập nhật cơ sở dữ liệu ít đau đớn hơn. Nếu bạn nghĩ rằng tôi đang nhìn vào điều sai hoàn toàn, xin vui lòng cho tôi biết trong một nhận xét! Điều đó nói rằng, ví dụ cơ sở dữ liệu tôi đã đưa ra chỉ là một ví dụ và tôi nghĩ rằng các bình luận TODO có ngày đáo hạn cũng sẽ hữu ích trong các tình huống khác, vì vậy ngay cả khi tôi tiếp cận tình huống cụ thể này, tôi thực sự muốn trả lời câu hỏi thực tế quá. Cảm ơn!

EDIT: Tôi chỉ nghĩ về một tình huống khác mà điều này có thể hữu ích. Nếu bạn sử dụng Kính râm tính năng để bật các phần của ứng dụng khi chúng sẵn sàng, bạn phải cẩn thận để dọn sạch chúng, nếu không bạn có thể kết thúc với Toggle Debt . Bình luận với thời hạn có thể là một cách tốt để ghi nhớ điều này.


19
Vấn đề TODO là vấn đề kỷ luật hơn là dụng cụ.
Brandon

16
Tôi nghĩ rằng tất cả con người đều phạm sai lầm, và dụng cụ có thể là một cách tốt để giảm thiểu điều này.
Joshua Walsh


3
Những gì về làm điều này lập trình như thế nào. Tôi có nghĩa là viết trong một thành viên lớp phiên bản của bạn. Không khởi động ứng dụng nếu phiên bản bằng == 56 với thông báo "lớp y" cần có tính năng này, bạn có thể có một danh sách các tin nhắn như vậy. Bạn nghĩ sao?
Tomer Ben David

6
Được hướng dẫn tại những người nói này, tôi không đồng ý: Cơ sở mã của chúng tôi phụ thuộc vào rất nhiều thành phần khác mà chúng tôi không hoạt động, vì vậy chúng tôi sử dụng TODO <Bug#>:để theo dõi cách giải quyết các vấn đề với các thành phần khác. Khi một lỗi được xóa trên một trong các thành phần đó, bạn có thể dễ dàng tìm và giải quyết các cách giải quyết có liên quan. Nó không thay thế một trình theo dõi vấn đề, nó giúp bảo trì dễ dàng hơn.
TemporalWolf

Câu trả lời:


53

Câu hỏi này thực sự là hai câu hỏi trong một.

Bình luận Todo

Trong tất cả các cách để theo dõi các mục hành động, đây là điều tồi tệ nhất. Nhận xét của TODO là tốt trong quá trình làm việc tích cực hoặc như một cách gợi ý cho người bảo trì, "đây là điều có thể được cải thiện trong tương lai". Nhưng nếu bạn dựa vào các nhận xét của TODO để hoàn thành công việc, bạn sẽ thất bại.

Phải làm gì về nó

Nhận xét của TODO về cơ bản là nợ kỹ thuật, vì vậy chúng nên được xử lý như bất kỳ khoản nợ kỹ thuật nào khác. Hoặc giải quyết chúng ngay lập tức, nếu bạn có thời gian, hoặc đưa chúng vào hồ sơ tồn đọng để chúng có thể được theo dõi và ưu tiên.

Nói chung, và điều này hoàn toàn gây tranh cãi và mở cho cuộc tranh luận, các bình luận của TODO có thể được coi là một mùi mã. Nếu một bình luận TODO làm cho nó được kiểm tra phiên bản kiểm soát phiên bản, bạn phải tự hỏi mình, bạn có thực sự sẽ theo dõi nó ngay bây giờ không? Nếu không, điều đó ổn. Chỉ cần thành thật với chính mình và đưa nó vào tồn đọng.

Làm thế nào bạn quản lý tồn đọng này đi vào quá trình kinh doanh, chính trị công ty, và có lẽ một số quyền tự chủ cá nhân. Nhưng bạn vẫn cần tồn đọng theo dõi và ưu tiên để đảm bảo nó xảy ra.

Thay đổi cơ sở dữ liệu

Có, thay đổi cơ sở dữ liệu là khó khăn với chính sách không thời gian chết. Một số thủ thuật để giúp làm giảm bớt đau đớn:

Quá trình hậu triển khai

Tạo một quy trình hậu triển khai chạy như một phần của cùng một bản phát hành. Tuy nhiên, bạn muốn nó làm việc. Trên hệ thống cuối cùng tôi làm việc, tôi đã thiết kế một triển khai 4 pha:

  1. kịch bản cơ sở dữ liệu trước
  2. ứng dụng web
  3. kịch bản cơ sở dữ liệu postapp
  4. bảo trì cơ sở dữ liệu kịch bản

Ý tưởng là bất cứ khi nào có thể, chúng tôi sẽ đưa càng nhiều thay đổi cơ sở dữ liệu vào trước càng tốt.

Postapp được dành riêng cho các trường hợp bất thường khi chúng tôi cần thực hiện các thay đổi lược đồ không tương thích. Trong những trường hợp đó, việc áp dụng lại sẽ tạo ra đủ thay đổi để làm cho mã ứng dụng mới tương thích (có thể tạo chế độ xem tạm thời để tương thích) và postapp sẽ dọn sạch mọi tạo phẩm tạm thời như vậy.

Giai đoạn cửa sổ bảo trì được dành riêng cho những thay đổi thực sự cần thời gian chết hoặc khi rủi ro hoặc chi phí triển khai trực tiếp không đáng có. Ví dụ: các tập lệnh thay đổi lượng dữ liệu khổng lồ có thể cần phải khóa toàn bộ bảng.

Triển khai thường xuyên

Nếu bạn triển khai các bản phát hành mới đủ thường xuyên, bạn có thể đạt đến điểm mang thay đổi qua 2 hoặc 3 bản phát hành là chuyện nhỏ. Chu kỳ phát hành dài khuếch đại chi phí thay đổi cơ sở dữ liệu.


18
Nhận xét Todo là một cách khủng khiếp để theo dõi và ưu tiên công việc. Chúng là một cách hợp lệ để giải thích tại sao một nửa mã hoàn thành đang bay trong gió. Trong một thế giới hoàn hảo, không có mã nào làm được điều đó. Trong khi đó, trong cái này ...
candied_orange

6
... đôi khi thật tuyệt khi có một cách để theo dõi các khoản nợ kỹ thuật mà không một khoản tiền nào từ việc chuyển sang từ ông chủ có thể che giấu. Chắc chắn bạn sẽ không nhận được tín dụng để sửa nó. Đôi khi bạn vẫn sửa nó.
candied_orange

3
Vì vậy, chiến lược với hậu ứng dụng là những lần di chuyển đó chạy khi triển khai ứng dụng đã thành công? Còn mã thì sao? Giả sử bạn đang đổi tên một cột từ last_name thành họ. Mã cũ của bạn sử dụng last_name. Bạn di chuyển DB để thêm họ và thay đổi mã của bạn để sử dụng họ nếu nó khả dụng, nếu không thì là Last_name. Sau khi triển khai hoàn tất, bạn chạy di chuyển tiếp theo thả cột last_name cũ. Nhưng mã của bạn vẫn chứa mã cho Last_name, hiện không được sử dụng và do đó là nợ kỹ thuật. Làm thế nào để bạn thực thi làm sạch này?
Joshua Walsh

3
Mặc dù việc quản lý các mục hành động trong nhận xét thực sự là một cách tồi tệ, nhưng việc các bình luận tự động tạo ra các vấn đề trong hệ thống theo dõi có thể là một công cụ tốt để không quên làm điều này bởi vì bạn hiện đang ở giữa mã hóa một cái gì đó và không muốn chuyển đổi cứng bối cảnh cho hệ thống theo dõi vấn đề.
PlasmaHH

6
IMHO câu trả lời này là thiếu điểm. OP đã yêu cầu một giải pháp trong đó CI thông báo cho nhóm khi việc dọn dẹp quan trọng bị lãng quên, mà không làm lộn xộn "hệ thống quản lý vấn đề" (ý kiến ​​của TODO chỉ là một ví dụ, có thể không phải là giải pháp lý tưởng cho việc này). OP đã đưa ra một số lý do chính đáng tại sao anh ta không muốn sử dụng nó ở đây. Tuy nhiên, câu trả lời này cho thấy hoàn toàn dựa vào hồ sơ tồn đọng, trong trường hợp OP không có gì ngoài "hệ thống quản lý vấn đề" của mình. Vì vậy, IMHO câu trả lời này bỏ qua cốt lõi của câu hỏi và không đưa ra giải pháp.
Doc Brown

24

Không sử dụng TODO. Bạn đã có một danh sách TODO trong dự án của bạn. Nó được gọi là theo dõi vấn đề.

Tôi nghĩ vấn đề thực sự nằm ở câu này:

chúng ta có thể tạo một vé trong hệ thống quản lý vấn đề của mình, điều này tạo ra sự lộn xộn và cũng có thể được chuyển sang giai đoạn nước rút sau hoặc tồn đọng bởi ban quản lý.

Nếu trình theo dõi vấn đề của bạn tạo ra nhiều lộn xộn, hãy tìm cách khắc phục điều đó. Có thể một loại vấn đề đặc biệt / thẻ liên quan đến lễ ít hơn. Có thể vấn đề phụ. Có lẽ ít lễ hoàn toàn. Chúng tôi thực sự không thể nói. Nhưng nếu trình theo dõi vấn đề của bạn tạo ra quá nhiều công việc, mọi người thay vì đặt ra một câu hỏi phức tạp trên một diễn đàn công cộng hơn là chỉ thêm vấn đề đó, thì có gì đó sai nghiêm trọng.

Nếu quản lý của bạn trì hoãn quá mức phần cuối của một nhiệm vụ, bạn có hai tùy chọn:

  1. nói chuyện với quản lý của bạn tại sao đây là một ý tưởng tồi.

  2. xử lý nó như là một nhiệm vụ duy nhất. Đây có thể là giải pháp tiêu chuẩn vàng. Trong một thế giới hoàn hảo, bạn sẽ có thể thực hiện ba thay đổi cần thiết trong mỗi bước. Áp dụng một cho nhánh chính, hãy để nó xây dựng và triển khai. Trong khi đó, áp dụng cái thứ hai cho nhánh chính, hãy để nó xây dựng và triển khai và cứ thế để mọi thứ xảy ra trong cùng một lần chạy nước rút, và nếu nó không được thực hiện. Thậm chí có thể một cái gì đó tự động có ý nghĩa khi bạn thực hiện một cách hợp lý một triển khai, nhưng nó thực sự được chia thành 3.


Lời khuyên tốt, tôi sẽ suy nghĩ về những cách mà chúng ta có thể làm cho hệ thống quản lý vấn đề hoạt động cho chúng ta cho mục đích này. Tôi cũng thực sự thích ý tưởng "Có thể một cái gì đó tự động có ý nghĩa khi bạn thực hiện một cách hợp lý một triển khai", tôi đang cố gắng nghĩ cách chúng ta có thể làm điều đó. Tôi không chắc nó thực tế có thể mặc dù.
Joshua Walsh

11
Hoàn toàn hợp lý khi có ý kiến ​​về biểu mẫu // TODO(#12345): Frobnicate the sprocket before passing it along, với điều kiện lỗi # 12345 là số vấn đề "thực" và vấn đề được gán cho ai đó. Điều này làm cho nguồn dễ đọc hơn bằng cách làm rõ: "Không, bước frobnicate không ẩn trong một trong các phương thức của trình trợ giúp, nó chỉ đơn giản là không thực hiện được. Hãy xem lỗi # 12345 để biết thêm ngữ cảnh." Lý tưởng nhất là bạn có một kẻ nói dối hàng ngày chạy qua cơ sở mã tìm kiếm các số vấn đề đã đóng hoặc không hợp lệ, tất nhiên.
Kevin

9

Điều tôi đang tìm kiếm là một cách mà một bình luận TODO có thể có thời hạn cuối cùng và hệ thống Tích hợp liên tục của chúng tôi (hiện tại chưa quyết định mà chúng tôi sẽ sử dụng) sẽ từ chối bản dựng nếu hết thời hạn này.

Những gì bạn yêu cầu là có thể thực hiện được nếu bạn sẵn sàng thực hiện công việc và làm theo.

// TODO by v55: Tạo di chuyển để di chuyển các ràng buộc sang cột mới, xóa tham chiếu đến cột cũ trong ứng dụng // TODO by v56: Tạo di chuyển để thả cột cũ

grep //TODO by v55khi đến lúc triển khai v55. Xây dựng triển khai chạy một kịch bản làm điều đó như một thử nghiệm tích hợp.

Bạn có thể buộc 55 vào theo dõi phiên bản của mình hoặc chỉ cần nhắc cho nó.

Sẽ rất thú vị nếu bạn muốn kiểm tra // TODO bằng v54 khi thực hiện 55. Thay vào đó, hãy tìm kiếm cơ sở mã 55 lần chỉ cần tìm kiếm // TODO theo. Sau đó, lọc kết quả đó từ 1 đến 55. Bây giờ 56 sẽ không gây ra lỗi.

Bạn có thể nghĩ rằng "ồ chúng tôi sẽ không cần điều đó. Chúng tôi sẽ sửa những điều này mỗi lần miễn là chúng tôi có séc". Không, bạn sẽ không.


4
Nếu có, chúng tôi không làm khuyến nghị ở đây.
candied_orange

3
Nếu có một tên chung cho loại điều này có thể được cung cấp nhưng nếu bạn đọc trang bạn đã liên kết dòng về các đề xuất cho bạn biết điều này: softwareengineering.meta.stackexchange.com/a/6487/131624
candied_orange

6
Để rõ ràng, đó là nhận xét của bạn mà tôi phản đối chứ không phải toàn bộ câu hỏi.
candied_orange

2
Các trang web @YM_Inustries SE có xu hướng khép kín, giới thiệu về cơ bản là các câu trả lời đơn giản với các liên kết đến các trang web bên ngoài hoặc mời bạn google nó thay vì một liên kết nhưng cuối cùng nó cũng giống như vậy. Họ có thể hết hạn và trở nên chết. Vì vậy, một câu hỏi về đề xuất là ngoài chủ đề, tuy nhiên ai đó muốn đề cập đến một công cụ như là một bổ sung của một câu trả lời hoặc một nhận xét đơn giản, anh ta có thể làm điều đó.
Walfrat

2
"Tôi đã tự hỏi nếu một giải pháp hiện có tồn tại" - hãy thử hỏi chúng tôi tại softwarerecs.stackexchange.com
Mawg

4

Chúng tôi đã có một vấn đề rất giống nhau trong nhóm của chúng tôi. Để giải quyết vấn đề này, chúng tôi đã viết một kiểm tra phân tích tĩnh xử lý các TODO này bằng cách kiểm tra vấn đề JIRA hoặc Vấn đề Git mà chúng tham chiếu. Bản dựng của chúng tôi không thành công khi Sự cố được chỉ định di chuyển qua cột "Đang phát triển".

Do đó, chúng tôi có thể thoải mái sử dụng TODO mà không lo chúng bị lãng quên.

Tôi đã tạo ra một triển khai mã nguồn mở này, trong Java. Vâng, một từ chối trách nhiệm là tôi đã viết điều này, nhưng như tôi đã nói nó hoàn toàn mở nguồn và được cấp phép.

Công cụ này được gọi là Westie và một ví dụ về trình kiểm tra vấn đề Jira có trên README.md. Xem thêm GitIssueAnalyser.

Để ngăn tự quảng cáo nếu bạn có thêm bất kỳ câu hỏi nào, hãy gửi cho tôi một tin nhắn. Nếu bạn quyết định sử dụng nó và có bất kỳ đề xuất nào, vui lòng nêu ra bất kỳ vấn đề nào trên github.


1
Thật tuyệt! Chúng tôi cũng sử dụng JIRA, tôi có thể xem xét việc sử dụng này. Nó không thực sự giải quyết mối quan tâm của tôi về việc tạo ra sự lộn xộn trong hệ thống quản lý vấn đề của chúng tôi, nhưng ít nhất nó sẽ đảm bảo rằng chúng không thể bị lãng quên.
Joshua Walsh

@YM_Inustries Tôi rất vui. Tôi rất vui khi chấp nhận mọi đóng góp hoặc làm việc cho bất kỳ vấn đề nào được nêu ra.
tjheslin1

4

Đừng ToDo. Làm ngay bây giờ.

TLDR: Viết (và kiểm tra) các tập lệnh DB của bạn ngay bây giờ, không phải sau này; chỉ cần mã hóa chúng để việc thực thi của chúng phụ thuộc vào phiên bản DB.

Thí dụ

Ví dụ, hãy tưởng tượng rằng bạn muốn thay đổi tên cột từ SSNthành TaxID, một yêu cầu phổ biến khi đi quốc tế.

Để thực hiện điều này, có thể bạn sẽ tạm thời có cả a TaxIDvà một SSNcột. Và trong khi hỗ trợ cả hai phiên bản, bạn sẽ có một kích hoạt để cập nhật cái này từ cái kia. Nhưng bạn không muốn giữ kích hoạt đó vô thời hạn, vì vậy sau này, khi sự tương thích ngược không còn cần thiết nữa, bạn muốn loại bỏ kích hoạt đó (và SSNcột bị bỏ). Chúng tôi sẽ mã hóa tất cả những thứ đó lên phía trước mà không cần bất kỳ vật phẩm ToDo nào.

Trong ví dụ của chúng tôi, chúng tôi sẽ triển khai bản dựng 102 (có cột mới) trong khi vẫn duy trì khả năng tương thích với bản dựng 101 (không có).

Dưới đây là các bước.

1. Thiết lập bảng phiên bản

  1. Thêm một bảng duy nhất được gọi Configurationvới hai cột NameValue.

  2. Thêm một hàng với Name"TargetVersion" và đặt Valuephiên bản của bản dựng mới sẽ được triển khai.

  3. Thêm một hàng với một Name"Tương thích với" và đặt Valuesố phiên bản tối thiểu mà việc triển khai phải tương thích.

Kiểm tra và cập nhật các hàng này trước mỗi lần triển khai.

2. Sửa đổi tập lệnh triển khai

  1. Thêm một tập lệnh tạo một cột mới TaxID, cạnh nhau SSNvà điền nó từ SSNcột. Gửi mã này trong một Iftuyên bố kiểm tra TargetVersion; nếu phiên bản mục tiêu quá thấp (tức TaxIDlà chưa cần thiết), hãy bỏ qua.

    SELECT @TargetVersion = TargetVersion FROM Configuration
    IF @TargetVersion < '102' THEN RETURN
    ALTER TABLE Customer ADD COLUMN taxID VarChar(12) NOT NULL
    UPDATE Customer SET TaxID = SSN
    
  2. Thêm một tập lệnh tạo ra một kích hoạt cư trú TaxIDkhi chèn hoặc cập nhật SSNvà ngược lại. Gửi mã này trong một Iftuyên bố kiểm tra phiên bản đích và phiên bản tương thích; bỏ qua nếu TargetVersion quá thấp ( TaxIDkhông cần thiết) hoặc nếu phiên bản Tương thích quá cao ( SSNtrường không cần thiết).

    SELECT @TargetVersion  = TargetVersion,
           @CompatibleWith = CompatibleWith 
    FROM Configuration
    IF @TargetVersion  < '102' THEN RETURN
    IF @CompatibleWith > '101' THEN RETURN
    CREATE TRIGGER SSNAndTaxIDTrigger ON Customer etc.
    
  3. Thêm một tập lệnh để loại bỏ SSNcột. Đính kèm trong một Iftuyên bố loại bỏ cột chỉ khi phiên bản Tương thích đủ cao ( SSNkhông còn cần thiết).

    SELECT @CompatibleWith = CompatibleWith FROM Configuration
    IF @CompatibleWith <= '101' THEN RETURN
    IF OBJECT_ID('SSNAndTaxIDTrigger') IS NOT NULL DROP TRIGGER SSNAndTaxIDTrigger
    IF EXISTS (SELECT * FROM syscolumns c JOIN sysobject o ON o.id = c.is WHERE o.Name = 'Custeomr' AND c.Name = 'SSN') BEGIN
        ALTER TABLE Customer DROP COLUMN SSN
    END
    

3. Kiểm tra

Hãy chắc chắn kiểm tra việc triển khai của bạn với bất kỳ kết hợp số phiên bản Xanh / Xanh nào mà bạn muốn có thể hỗ trợ trong sản xuất. Bạn có thể kiểm tra ngay khi mã sẵn sàng, bằng cách thao tác Configurationbảng trong môi trường QA của bạn.

4. Trong sổ tay triển khai của bạn

Thêm một bước để một kỹ sư cập nhật phiên bản Tương thích và các hàng TargetVersion. Nếu bạn đang triển khai thành Màu xanh lam, hãy đặt TargetVersion thành số phiên bản của Blue và phiên bản Tương thích với số phiên bản của Green; đảo ngược chúng nếu bạn đang triển khai Green.

Cạm bẫy

Các tập lệnh triển khai của bạn có thể tham chiếu và dựa vào các số phiên bản được giữ trong bảng DB đó. KHÔNG mã thời gian chạy.

Nếu bạn bắt đầu viết mã thời gian chạy để kiểm tra số phiên bản, bạn sẽ đưa ra một mức độ phức tạp mới trong ứng dụng của mình có khả năng trở thành một vấn đề lớn về khả năng bảo trì. Mỗi đường dẫn thực thi thời gian chạy phải được kiểm tra; nếu bạn mang theo những điều kiện này trong tương lai, QA sẽ phải đưa ra một ma trận đau đớn để xác nhận chúng với mỗi bản phát hành. Lời khuyên của tôi là chỉ giữ các điều kiện như thế này trong các kịch bản triển khai.

Kết quả của tất cả điều này

Cuối cùng, bạn sẽ có thể viết tất cả mã lên trước (và cũng kiểm tra nó) mà không sợ rằng nó sẽ được thực thi quá sớm. Ngoài ra, mã sẽ dọn sạch trình kích hoạt tương thích ngược khi thời gian đến mà bạn không cần phải lo lắng về nó nữa.

Bằng cách này, bạn có thể viết và kiểm tra tất cả mã trước, khi bạn nghĩ về nó và bạn không cần phải xử lý những bình luận ToDo lộn xộn đó.


Tôi thực sự thích cách tiếp cận này, nó thanh lịch hơn bình luận của ToDo. Tôi đã nghĩ về nó ngay sau khi hỏi câu hỏi này và tôi đã suy nghĩ về việc tạo một bài đăng khác hỏi về cách tốt nhất để thực hiện điều này, nhưng hình dung tôi sẽ tự nghiên cứu trước. Mẹo cho chúng tôi là chúng tôi đang sử dụng Phinx cho việc di chuyển cơ sở dữ liệu của mình và nó không thực sự hỗ trợ điều này. Khi tôi có thời gian tôi sẽ tìm cách mở rộng nó để hỗ trợ quy trình công việc này. Cách tiếp cận này không giải quyết được vấn đề làm thế nào để đảm bảo rằng mã tương thích ngược bị xóa khỏi tầng ứng dụng của tôi, nhưng nó rất thanh lịch đối với vấn đề DB.
Joshua Walsh

1

Bạn đang nhận được rất nhiều phản hồi về ý tưởng TODO của bạn, nhưng cá nhân tôi thấy không có vấn đề gì với nó. Cuối cùng, cách tốt nhất (và dễ nhất) để đảm bảo việc di chuyển đi vào sản xuất là bằng cách không thực hiện kiểm tra đơn vị nếu không. Theo nghĩa đen, bạn sẽ mất ít hơn một phút để loại bỏ một chức năng di chuyển trống, ném ra một ngoại lệ nếu phiên bản từ 55 trở lên (hoặc bất cứ yêu cầu nào).

Sau đó, nếu bạn cố gắng phát hành nó, bạn sẽ kết thúc một thử nghiệm thất bại và ai đó sẽ phải biến ngoại lệ đó thành mã di chuyển thực tế.


1
Đúng, tôi đã lý tưởng hy vọng coi một TODO đã hết hạn là một thử nghiệm thất bại. Lượng phản hồi chống lại TODO đã làm tôi ngạc nhiên một chút, tôi biết rằng chúng không thay thế cho hệ thống quản lý vấn đề nhưng do sự phổ biến của TDD / BDD rõ ràng là không có vấn đề thực sự nào trong việc xác định các yêu cầu trong mã và sử dụng mã để thực thi tính năng hoàn thành.
Joshua Walsh

-2

Không ai có vẻ đang tập trung vào gốc rễ của khiếu nại của mình, đó là thực tế là các thay đổi cơ sở dữ liệu có thể mất quá nhiều chu kỳ phát hành. Anh ấy muốn tiếp tục với lịch triển khai màu xanh / xanh của mình và giải pháp đã có sẵn nhưng trừ khi tôi thiếu một cái gì đó mô tả của anh ấy dường như chỉ ra rằng chỉ có một cơ sở dữ liệu được chia sẻ bởi cả hai hệ thống. Không phải là một hệ thống Blue / Green thực sự nếu đó là trường hợp. Vì có vẻ như cơ sở dữ liệu là cực dài trong lều nên nó cũng được sao chép sao cho dù có mất bao lâu hay bao nhiêu chu kỳ phát hành để thực hiện thay đổi cơ sở dữ liệu trên hệ thống ngoại tuyến, chúng sẽ không hoạt động cho đến khi hoàn thành và kiểm tra đầy đủ. Trong các kịch bản hệ thống ngoại tuyến tạm thời có thể giữ cho cơ sở dữ liệu ngoại tuyến được cập nhật đầy đủ hàng ngày.


1
Sao chép cơ sở dữ liệu trong một triển khai màu xanh / xanh gây ra rất nhiều đau đầu. Khi prod env của tôi ở đâu đó giữa màu xanh lam và màu xanh lá cây, (chẳng hạn 50% tải được phân phối cho mỗi ví dụ) Tôi cần phải có mã sao chép giữ cả hai cơ sở dữ liệu đồng bộ, ngay cả khi lược đồ của chúng khác nhau. Từ nghiên cứu tôi đã thực hiện, có vẻ như hầu hết mọi người trong thế giới thực đều có một cá thể DB được chia sẻ giữa các ngăn xếp màu xanh và màu xanh lá cây của họ. Tôi không thấy đây là một vấn đề lớn miễn là việc di chuyển cơ sở dữ liệu khá nhanh chóng. Các ngăn xếp màu xanh lam / xanh lục vốn cần chia sẻ một số tài nguyên, ít nhất là bộ cân bằng tải / proxy ngược.
Joshua Walsh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.