Мое настоящее контрактное соглашение связано с крупной компанией электронной коммерции. Их кодовая база, берущая начало в .Net 1.0, застала меня врасплох, так как содержит много проблем, которые поднимают уровень запаха за пределы последнего дерьма, которое я взял.
Несмотря на то, что, пытаясь отвлечься от этого, я стараюсь изо всех сил пытаться добавить новые функции, чтобы либо исправить другие проблемы, либо расширить дерьмо. Когда я коснусь DAL / BLL, будет сделано время, необходимое для исправления вышеупомянутого. Однако я хотел получить вотум доверия экспертов, чтобы получить некоторую уверенность в том, что я не трачу время клиентов или что еще хуже, если мой авторитет будет отвергнут, коснувшись «вещей, которые работают». Конечно, юнит-тестирование решило бы или хотя бы смягчило это беспокойство. Возможно, это также следует добавить в wtf.com?
Public Function GetSizeInfoBySite(ByVal siteID As String) As IList
Dim strSQL As String = "YES INLINE SQL!! :)"
Dim ci As CrapInfo
Dim alAnArrayList As ArrayList
Dim cn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim cmd As New SqlCommand(strSQL, cn)
cmd.Parameters.Add(New SqlParameter("@MySiteID", SqlDbType.NVarChar, 2)).Value = siteID
cn.Open()
Dim rs As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
While rs.Read()
ci = New CategoryInfo(rs("someID"), rs("someName"))
If IsNothing(alAnArrayList) Then
alAnArrayList = New ArrayList
End If
alAnArrayList.Add(ci)
End While
rs.Close()
Return CType(alAnArrayList, IList)
End Function
Кто-нибудь видит проблемы с этим, кроме встроенного SQL, который заставляет меня нервничать? По крайней мере, разве вы не обернули бы вышеизложенное в try / catch / finally, которое большинство из нас знает, начиная с .Net v1.0? Еще лучше, не было бы разумно исправить с помощью операторов? Действительно ли закрытие SQLDataReader автоматически закрывает соединение?