Когда Вы осуществляете рефакторинг код? [закрытый]

Я немного опоздал на вечеринку - но недавно я тоже столкнулся с этой проблемой. Вот соответствующие выдержки из моего решения ...

Сначала вам нужно получить токен аутентификации. Для этого вы можете использовать эту удобную функцию.

function GetAuthToken
{
       param
       (
              [Parameter(Mandatory=$true)]
              $TenantName
       )

       $adal = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

       $adalforms = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll"

       [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null

       [System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null

       $clientId = "1950a258-227b-4e31-a9cf-717495945fc2" 

       $redirectUri = "urn:ietf:wg:oauth:2.0:oob"

       $resourceAppIdURI = "https://graph.windows.net"

       $authority = "https://login.windows.net/$TenantName"

       $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority

       $authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId,$redirectUri, "Auto")

       return $authResult
}

(заимствовано у Пауло Маркеса https://blogs.technet.microsoft.com/paulomarques/2016/03/21/working-with-azure-active-directory-graph-api-from- powershell / )

Затем вы можете отправить запрос POST в API-интерфейс Azure Graph API для создания вашего приложения. Однако требуется небольшая настройка.

# The name of this AAD instance
$global:tenant = "mycompany.onmicorosft.com"
$global:aadSecretGuid = New-Guid
$global:aadDisplayName = "azure-ad-displayname"
$global:aadIdentifierUris = @("https://contoso.com")
$guidBytes = [System.Text.Encoding]::UTF8.GetBytes($global:aadSecretGuid)

$global:aadSecret = @{
    'type'='Symmetric';
    'usage'='Verify';
    'endDate'=[DateTime]::UtcNow.AddDays(365).ToString('u').Replace(' ', 'T');
    'keyId'=$global:aadSecretGuid;
    'startDate'=[DateTime]::UtcNow.AddDays(-1).ToString('u').Replace(' ', 'T');  
    'value'=[System.Convert]::ToBase64String($guidBytes);
}

# ADAL JSON token - necessary for making requests to Graph API
$global:token = GetAuthToken -TenantName $global:tenant
# REST API header with auth token
$global:authHeader = @{
    'Content-Type'='application/json';
    'Authorization'=$global:token.CreateAuthorizationHeader()
}

Теперь вы можете использовать Graph API.

$resource = "applications"
$payload = @{
    'displayName'=$global:aadDisplayName;
    'homepage'='https://www.contoso.com';
    'identifierUris'= $global:aadIdentifierUris;
    'keyCredentials'=@($global:aadSecret)
}
$payload = ConvertTo-Json -InputObject $payload
$uri = "https://graph.windows.net/$($global:tenant)/$($resource)?api-version=1.6"
$result = (Invoke-RestMethod -Uri $uri -Headers $global:authHeader -Body $payload -Method POST -Verbose).value

Как только ответ возвращается, вы можете извлечь необходимые значения конфигурации.

# Extract configuration values
$keyObject = foreach($i in $result.keyCredentials) { $i }

# Tenant ID
$global:aadTenantId = Get-AzureRmSubscription | Select-Object -ExpandProperty TenantId
# Application object ID
$global:aadApplicationObjectId = $result | Select-Object -ExpandProperty objectId
# App ID / Client ID
$global:aadClientId = $result | Select-Object -ExpandProperty appId
# Application Secret/Key
$global:aadAppSecret = $keyObject | Select-Object -ExpandProperty keyId

Надеюсь, это кому-нибудь поможет!

14
задан skaffman 18 February 2012 в 10:14
поделиться

16 ответов

  • В рамках первоначальной разработки (красный / зеленый / рефакторинг)
  • По предложению рецензента кода
  • Когда мы заметили проблему дизайна
  • При создании другого изменить, если рефакторинг имеет незначительное влияние, т.е. обычно не влияет на другие файлы.

Если он влияет на общедоступный API, я обычно хотел бы сделать рефакторинг единственной фиксацией исходного кода, который не изменяется поведение (а затем встроить новое поведение в другой коммит). Если это повлияет и на другие проекты, по этому поводу должен быть консенсус, и я хотел бы получить разрешение на изменение их кода, чтобы он включился в тот же коммит рефакторинга.

14
ответ дан 1 December 2019 в 12:27
поделиться

Предложение LIMIT не является частью стандартного SQL. Он поддерживается как расширение поставщика для SQL в MySQL, PostgreSQL и SQLite.

Базы данных других производителей могут иметь аналогичные функции (например, TOP в Microsoft SQL Server), но они не всегда работают одинаково.

Трудно использовать TOP в Microsoft SQL Server для имитации предложения LIMIT . Есть случаи, когда это просто не работает.

Решение, которое вы показали, с использованием ROW_NUMBER () , доступно в Microsoft SQL Server 2005 и более поздних версиях. Это лучшее решение (на данный момент), которое работает исключительно как часть запроса.

0
ответ дан 1 December 2019 в 12:27
поделиться

Я выполняю рефакторинг, когда исправляю ошибку или добавляю функцию, и процесс рефакторинга упрощает чтение и сопровождение кода.

0
ответ дан 1 December 2019 в 12:27
поделиться

Я всегда делаю небольшие рефакторинги в своем коде. Я знаю, что пока у меня есть модульные тесты, чтобы убедиться, что все по-прежнему работает должным образом, я не вижу вреда в том, чтобы делать это на ходу. Таким образом, у вас не будет смутного ощущения «необходимости рефакторинга» каждый раз, когда вы над этим работаете.

Теперь, если он требует серьезного рефакторинга, лучше спланировать его и выделить некоторое время.

0
ответ дан 1 December 2019 в 12:27
поделиться

Похоже, большинство других плакатов безжалостно сопротивляются рефакторингу . Конечно, это невозможно, если система, над которой вы работаете, не поддерживает это посредством обширных модульных тестов. Но в целом, если я вижу возможность сделать код более жестким, не затрачивая больше нескольких минут или максимум часов, я иду на это. Если я не уверен, над чем мне следует работать, я ищу, что можно реорганизовать.

0
ответ дан 1 December 2019 в 12:27
поделиться

Рефакторинг при необходимости:

  • , когда вам нужно лучшее понимание кода, над которым вы работаете (здесь часто помогает объединение в пары), примеры: переименование, извлечение методов и т. д.
  • , когда текущий дизайн не позволяет «чистое» изменение: на этом этапе вы действительно можете поспорить с ваш менеджер на основе ценности (например, сколько стоит эта новая функция для проекта)
0
ответ дан 1 December 2019 в 12:27
поделиться

Чтобы взглянуть на нашу компанию, мы решили, что наш предстоящий выпуск приложения в основном посвящен производительности оптимизации, а не новой функциональности. Мы чувствовали, что это было необходимо, и о нем также просили некоторые клиенты. Поэтому мы потратили много времени на выявление узких мест в производительности нашего приложения, а также на анализ кода и его рефакторинг, чтобы все работало быстрее.

В нашем случае мы сделали это, потому что руководство одобрило нас делать это для этого нового выпуска, потому что мы показали им, насколько можно улучшить производительность.

0
ответ дан 1 December 2019 в 12:27
поделиться

В этом часто помогают процессы проверки кода. Если я касаюсь какого-то кода, он проверяется, рецензент спрашивает: «Почему вы это сделали?», Я отвечаю: «Мне пришлось из-за (вставьте здесь некрасивость)». Это признак того, что код следует отредактировать сразу после завершения проверки.

0
ответ дан 1 December 2019 в 12:27
поделиться

Недостаточно часто, что приводит к накоплению технического долга.

Печально, но это так.

Делайте, как я говорю, а не как команда, над которой я работаю.

0
ответ дан 1 December 2019 в 12:27
поделиться

We found small refactorings are best done while we were working on a bit of code - do what's required, preferably paired.

For bigger things, we had a Technical Debt section on the wall - if you spotted something and didn't have the time to address it, or it was going to take some discussion to solve, you'd add it to the wall and they would be scheduled for future iterations (or when free time cropped up).

1
ответ дан 1 December 2019 в 12:27
поделиться

Я часто реорганизую свой код при изменении требований пользователя или исправлении ошибок. Тогда у людей будет возможность просмотреть ваши изменения.

В противном случае я обычно не трогаю работоспособный код, даже если он пахнет.

1
ответ дан 1 December 2019 в 12:27
поделиться

Я работаю в большой системе, поэтому меняю только то, что нужно. Легко иметь плохие побочные эффекты от изменений.

Я проведу рефакторинг участков кода, которые работают плохо, не работают должным образом или нуждаются в новых функциях.

Я никогда не решаю просто что-то исправить, я никогда не закончу . если он работает, и никто не просит изменений и не жалуется на проблемы, двигайтесь дальше. жизнь слишком коротка, чтобы все исправить.

1
ответ дан 1 December 2019 в 12:27
поделиться

, как только будут выполнены все тесты.

2
ответ дан 1 December 2019 в 12:27
поделиться

Рефакторинг, пока вы уже в коде, иногда проще всего, особенно если ваш руководитель не поддерживает инициативу , но если вы измените только небольшую часть, это нарушит согласованность с окружающими частями. В таких случаях лучше действовать избирательно и, как вы предложили, делать то, что мало влияет. Также может быть полезно преобразовать длинные операторы select / switch в функции и отложить рефакторинг внутреннего кода до некоторого времени.

На предыдущей работе я был менеджером, поэтому я проводил рефакторинг, когда хотел. На моей нынешней работе я аналитик, поэтому большая часть кода не входит в мою прямую ответственность. Когда я пишу код, я избегаю влияния на все, что я не пишу.

2
ответ дан 1 December 2019 в 12:27
поделиться

Мы проводим рефакторинг так часто, как можем. Наличие модульных тестов для проверки того, что все работает до и после рефакторинга, действительно помогает.

0
ответ дан 1 December 2019 в 12:27
поделиться

Я обнаружил, что рефакторинг при пересмотре кода (предположительно для добавления / расширения функциональности) более чем через 3 месяца после его написания.

Если мне требуется больше 2 минут, чтобы понять, что делает кусок кода, я разбиваю его на части, чтобы сделать его более понятным (или просто добавляю еще несколько комментариев).

2
ответ дан 1 December 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: