-
全部 · 2025年18月19日
PCR引物的設計原理
閱讀全文 -
全部 · 2025年40月16日
文庫定量的常見方法與技巧
閱讀全文 -
文章 · 2025年36月16日
體外DNA擴增技術
閱讀全文
此功能升級直接來自客戶回饋生產體系。 謝謝你! 我們很高興聽到您的想法—請繼續(xù)提出堅實基礎!
當協(xié)議設計器 (PD) 首次創(chuàng)建時,Opentrons 設想了一個平臺,科學家可以在其中快速建立基本的移液協(xié)議形式,而無需編寫任何程式碼穩定發展。 隨著 PD 越來越多地被我們社區(qū)所利用基石之一,它成為一種工具,使科學家能夠建立冗長而複雜的方案增持能力,以解決 DNA 提取共同努力、蛋白質純化和 COVID-19 診斷等應用。 當我們開始看到科學家使用 PD 建立包含 100 多個步驟的方案時追求卓越,我們知道我們需要為他們提供更好的方法來優(yōu)化和編輯他們的方案逐漸完善。 科學家有足夠多的擔憂:我們不希望他們花時間一遍又一遍地乏味地改變相同的設定。
所以合理需求,我們剛剛為 PD 新增了批次編輯模式是目前主流! 使用者現(xiàn)在可以選擇、複製高效、刪除和編輯多個步驟應用創新,從而能夠更快地迭代和優(yōu)化科學協(xié)議。
在產品開發(fā)團隊開始考慮如何完成此功能之前持續創新,我們就知道這將是一個巨大的工程挑戰(zhàn)改善。 擴展 PD 這樣的應用程式以支援完全不同的使用者流程(例如批次編輯)將需要大量重構,這會影響 Protocol Designer 的核心部分協調機製。 這篇文章將從工程角度重點討論此功能信息化,但我也想指出完成此功能所面臨的巨大設計挑戰(zhàn)。 PD 的核心原則之一是易用性實踐者,打造易於使用取得明顯成效、直覺的使用者體驗來建立和優(yōu)化複雜的科學協(xié)議絕非易事。
專為一次編輯一個步驟而設計
PD 旨在從頭開始建立科學方案數據,依序建立和編輯步驟創新的技術。 流程如下:
這意味著在任何給定時間占,PD 中的主「設計」標籤都會顯示以下部分/全部內容:
PD 的 UI 元件(內建於 React)和全域狀態(tài)管理儲存(在 Redux 中實作)就是為了適應這種使用者流程而建構的。 這意味著 PD 的 redux 儲存會追蹤「選定步驟」之類的內容激發創作,以便用戶可以直觀地看到協(xié)議的特定部分實際發(fā)生的情況前景。 它還會追蹤「未儲存的表單」等內容,在提交之前追蹤待處理的變更增幅最大。
請注意上面捕獲的資料的奇異性(選定的步驟共享應用,未儲存的形式)生產能力。 PD 的 redux 儲存和 React 元件旨在與一個步驟交互,而不是多個步驟取得了一定進展。 為了說明這一點完善好,讓我們看看 PD 如何根據選擇的步驟填充實驗室器皿上的孔(這就是上圖中孔顯示為綠色的方式)。
但是,當我們開始追蹤多個選定步驟而不是只追蹤一個步驟時交流研討,會發(fā)生什麼事更加完善? 特別是,上面的步驟 3 會發(fā)生什麼事建設應用? 如果我們選擇了多個項目支撐作用,我們該怎麼辦?
為了防止同時選擇/編輯多個步驟時元件損壞背景下,我們必須對資料的表示和轉換方式進行核心變更綜合措施。 讓我們回顧一下我們所做的事情。
追蹤多個選定的步驟
在此功能之前自然條件,我們僅在 Redux 儲存中追蹤單一「selectedItem」設計標準。 我們的「selectedItem」reducer 類型介面類似於下面的程式碼片段。 請注意互動互補,本文中的所有程式碼片段均採用 JavaScript 編寫發揮重要帶動作用,並使用 flow js 鍵入。
Type SelectableItem = SingleSelectedItem const selectedItem = (state: SelectItemState, action: SelectedItemAction): ?SelectableItem |
減速器函數「selectedItem」接受狀態(tài)和操作意料之外,並傳回所選項目(保存所選項目相關資訊的物件)文化價值,如果沒有所選項目,則傳回 null置之不顧。
為了避免在批次編輯模式下新增新的縮減器來保存多個步驟不斷完善,我們選擇修改「selectedItem」縮減器以適應返回單一步驟和多個步驟。
Type SelectableItem = SingleSelectedItem | MultipleSelectedItem const selectedItem = (state: SelectItemState, action: SelectedItemAction): ?SelectableItem |
「selectedItem」的傳回類型已修改為能夠儲存包含單一步驟 id 的物件(代表單一選擇類型)方便,或包含多個步驟 id 清單的物件(代表多重選擇類型) 營造一處。 為了告訴 redux 我們已經選擇了多個步驟,我們建立了一個名為「SELECT_MULTIPLE_STEPS」的操作知識和技能,「selectedItem」reducer 函數將接受該操作,並更新其值以表示多個步驟(請參閱類型「MultipleSelectedItem」)
名為「selectedItem」的減速器肯定會有些尷尬新模式,它可能保存表示多個項目的數據實現,但我們最終決定,這種權衡是值得的組織了,不必添加額外的減速器來表示多個選定的項目服務體系,從而必須取消一個或多個項目另一個是在單一編輯模式和批次編輯模式之間切換時說服力。
為了防止過去只接受一個步驟作為 props 的元件被破壞,我們能夠利用 redux 選擇器模式將來自減速器的資料轉換為我們的元件可以接受的格式分析。 將所選步驟的資訊提供給我們的元件的主選擇器稱為“getSelectedStepId”表示,它曾經執(zhí)行以下操作:
const get selected step ID: ?string = (state: state) => state.selected item |
這是選擇器過去所做的事情的簡化,但你明白了——它基本上進入了“selectedStep”減速器並返回其中的任何內容非常激烈。 因為我們的組件從選擇器而不是減速器獲取選定的步驟競爭力所在,所以我們能夠首先轉換減速器中保存的數據,然後再將其輸入到我們的組件中領域。
這意味著我們要做的就是修改“getSelectedStepId”以在reducer保存“單選擇類型”時返回步驟id發展需要,否則返回null:
const get selected step ID: ?string = (state: state) => state.selected item.selection type === single_step_selection_type ? state.selected item.ID : null |
由於我們現(xiàn)有的元件現(xiàn)在能夠處理選擇的多個步驟,因此我們新增了一個名為“getMultiSelectItemIds”的新選擇器管理,它類似於“getSelectedStepId”顯示,但在批次編輯模式下返回步驟ID 列表,否則返回null效率和安。 此選擇器將用於告訴 PD 在批次編輯模式下選擇了哪些步驟設計能力。
const get multi select item IDS: ?array |
從減速器 => 選擇器 => 組件中獲取資料流確實對我們有幫助,因為我們能夠更改減速器的結構深入開展,而不必擔心組件損壞更為一致。 此外,由於我們使用 reselect 將選擇器組合在一起空間廣闊,因此所有使用「getSelectedStepId」的高階選擇器仍然可以正常運作至關重要。
填入批次編輯表單
PD 根據規(guī)則矩陣決定多個步驟中的哪些欄位是可編輯的。 例如服務品質,如果使用者選擇兩個轉移步驟的發生,並且這兩個步驟具有不同的移液器,則他們不應能夠修改兩個步驟之間共享的移液器流速設定影響。
使用規(guī)則矩陣新的動力,我們建立了另一個名為「getMultiSelectDisabledFields」的 redux 選擇器,顧名思義發展契機,它決定在多選模式下應停用哪些欄位廣泛關註。 它會迭代所選表單中的所有字段,並確定表單是否共用相同的移液器發力、實驗室器具等優勢領先。根據每個欄位的規(guī)則,它將傳回哪些欄位被禁用的對應以及每個欄位被停用的原因共創美好。 字段被禁用推動並實現。 然後,批次編輯表單元件可以使用此資訊來填入哪些欄位可編輯,哪些欄位無法編輯優化程度。
追蹤批次編輯更改
填充批次編輯表單的欄位後積極性,需要在使用者修改它們時追蹤其值的變更。 這是出於以下幾個原因:
對於單一編輯模式與時俱進,有另一個名為「unsavedForm」的減速器,它將所有資訊保存在單一未儲存的表單中初步建立,但我們決定不在批次編輯模式中重複使用它綜合運用,因為:
1.批量編輯表單保存多個表單的信息,而不僅僅是一個表單
為了實現(xiàn)這一點處理方法,我們創(chuàng)建了一個名為「batchEditFormChanges」的新減速器,它包含一個純 JavaScript 對象持續向好,將編輯的欄位名稱表示為鍵習慣,以及關聯(lián)的欄位值。
重複使用表單元件
PD 的表單元件非尺M展情況!爸腔邸钡姆e極性,因為它們連接到 redux,因此可以存取表單資料至關重要。 問題在於「智慧型」元件中的邏輯直接與單一編輯模式相關不久前。 為了消除單一編輯模式的依賴,我們決定在單一編輯模式和批次編輯模式下注入表單元件提升行動,並使用一組共用名為「FieldProps」的通用 API 的 props
export type FieldProps = {| disabled: boolean, errorToShow: ?string, isIndeterminate?: boolean, name: string, onFieldBlur: () => mixed, onFieldFocus: () => mixed, tooltipContent?: ?string, updateValue: mixed => void, value: mixed, |} |
為了實現(xiàn)這一目標能力建設,我們創(chuàng)建了兩個單獨的函數(一個用於單一編輯模式,一個用於批次編輯模式)研究進展,負責計算上面的每個「FieldProps」無障礙。 它們被恰當地命名為“makeSingleEditFieldProps”和“makeBatchEditFieldProps”。 單一編輯表單的主要父元件使用前者,而批次編輯表單的對應元件則使用後者發揮重要帶動作用。
這兩個純函數都會取得對應的單編輯/批次編輯狀態(tài)資訊(例如每個表單中包含哪些資訊),執(zhí)行必要的邏輯深入實施,並傳回一個包含與上面相同的「FieldProps」介面的物件至關重要。 這意味著只要我們所有的表單元件接受“FieldProps”接口,它們就可以用於單一編輯模式和批次編輯模式效果。
將我們現(xiàn)有的表單元件從耦合的單一編輯模式邏輯中遷移出來是一項相當大的工作(而且我們還有更多工作要做)有所應,但是創(chuàng)建這個通用的props 介面允許我們重複使用現(xiàn)有的表單欄位元件,同時繪製一個單一編輯模式邏輯和批次編輯模式邏輯之間的清晰界線合作關系。
上述所有工作(以及更多)花了我們由三名工程師著力提升、一名設計師、一名產品經理和一名品質檢查工程師組成的團隊大約三個月的時間才完成傳遞。 您可以在此處查看我們用於選擇多個步驟的史詩融合,以及用於批量編輯表單特定工作的史詩。 我們的所有工作都是開源的相關性,因此請隨意瀏覽我們的程式碼庫完成的事情。
在開始開發(fā)此功能之前,我們問自己整個季度的投資是否值得穩定。 由於批量編輯是迄今為止用戶最常見的功能請求改造層面,因此我們最終決定如此。 然而優勢與挑戰,值得注意的是經驗分享,使用者想要同時編輯多個步驟的原因是因為他們的協(xié)議通常包含許多步驟,這些步驟更容易批量編輯趨勢,而不是一次編輯一個有力扭轉。 隨著越來越多的科學家使用 PD 來解決越來越複雜的問題,包含許多步驟的協(xié)議問題將會增加設備製造。
展望未來發展需要,我們希望更了解使用者到底在使用 PD 建構什麼,以及我們可以採取哪些措施來幫助他們最大限度地減少創(chuàng)建步驟管理。 隨著 PD 的不斷發(fā)展和發(fā)展顯示,我們將努力回答這些問題。 雖然我們對此功能感到非常興奮效率和安,但我們的使命是讓科學家更快採取行動設計能力,並解決我們迫切需要他們解決的問題,這項使命還遠未結束深入開展。
經驗豐富的服務團隊和強大的生產支援團隊為客戶提供無憂的訂單服務更為一致。