Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

​Инвариант в строго типизированном классе.

14.05.18 15:57
Re: ​Инвариант в строго типизированном классе.
 
Murr патриот
Murr
в ответ AlexNek 14.05.18 14:31

Такие штуки за раз не делаются нормально, нужны итерации.

-----

Это Я вполне себе понимаю.

Только объемы такие, что одному неподъемно... Эти 450К всего лишь часть системы... по сумме - 2Гб соурсов...



Тем более, что нужна постоянно работающая система.

-----

Угу... Я вот переработал другой кусок кода... почти все подтянул... что-то даже работало...

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

Классы - сделал. А времени переработать код используя эти классы - нету... там - много...

Так и лежит - что-то работающее, что-то доработанное, что-то - вообще не понятное...

Плюс, еще выяснилось, что есть еще кусок кода, который надо синхронно дорабатывать.

А в этом куске - ой, чего там только нет - и работа с базой, и работа с железом, и работа с сетью...

да еще и юзерский интерфейс замороченный...

И все - ВБ6-лике - раздербанить на логические куски - не выходит...



зато до пенсии хватит работы

-----

Это точно плюс. Только вот через пару лет все одно сваливаю. На Юг, к морю...



Таблицы то хоть имеют смысл какой-то или тоже лишь бы как?

------

Га?!!!

Вот только что переработал кусок

[пре]

public DataTable loadDTItemsFurnace2(string startDate, string finishDate, string furnaceID)

{

string[] str;

IEnumerator enumerator = null;

IEnumerator enumerator1 = null;

DataTable DTScanBcd = new DataTable();

DataTable DTBatches = new DataTable();

DataTable DTToughMan = new DataTable();

DataTable DTToughOpt = new DataTable();

DataTable DTTough = null;

try

{

str = new string[] { "SELECT DISTINCT tod.TOD_BATCH_NO batchNo, tod.TOD_OPT_RECIPE recipe, tod.TOD_PIT_NO pitNo FROM C_TOUGH_OPT_DONE tod WHERE tod.TOD_TIMESTAMP BETWEEN TO_DATE('", startDate, "','DD-MON-YY HH24:MI') AND TO_DATE('", finishDate, "','DD-MON-YY HH24:MI') AND tod.TOD_COMPLETE=1 AND tod.TOD_FURNACE_NO IN (", furnaceID, ") " };

DTBatches = (DataTable)DANenprod1.fillDT(string.Concat(str));

try

{

enumerator = DTBatches.Rows.GetEnumerator();

while (enumerator.MoveNext())

{

DataRow DRBatches = (DataRow)enumerator.Current;

str = new string[] { "SELECT 666 bcd, tod.TOD_TIMESTAMP timestamp, SYSDATE presentTime, tmr.TMR_BATCH_NO batchNo, tmr.TMR_SEQUENCE_NO seqNo, ps.PS_ORDER_NO orderNo, ps.PS_ORDER_POS itemNo, akt.AT_CUST_NAM customerName, 1 qty, ap.AP_WIDTH_1/1000*AP_HEIGHT_1/1000 sqm, TOD_OPT_RECIPE recipe FROM AUF_KOPF_TEXTE akt, PRD_SEQ ps, AUF_POS ap, C_TOUGH_OPT_DONE tod, C_TOUGH_MAN_RESULT tmr WHERE tod.TOD_FURNACE_NO=tmr.TMR_FURNACE_NO AND tod.TOD_OPT_RECIPE=tmr.TMR_OPT_RECIPE AND tod.TOD_BATCH_NO=tmr.TMR_BATCH_NO AND tmr.TMR_PIT_NO=tod.TOD_PIT_NO AND tmr.TMR_BATCH_NO=ps.PS_BATCH_NO AND tmr.TMR_SEQUENCE_NO=ps.PS_SEQUENCE_NO AND ps.PS_ORDER_NO=ap.AP_ORDER_NO AND ps.PS_ORDER_POS=ap.AP_ORDER_POS AND akt.AT_ORDER_NO=ps.PS_ORDER_NO AND tod.TOD_COMPLETE=1 AND tod.TOD_BATCH_NO=", DRBatches["batchNo"].ToString(), " AND tod.TOD_OPT_RECIPE=", DRBatches["recipe"].ToString(), " AND tod.TOD_PIT_NO=", DRBatches["pitNo"].ToString(), " AND tod.TOD_FURNACE_NO IN (", furnaceID, ")" };

DTToughMan = (DataTable)DANenprod1.fillDT(string.Concat(str));

if (DTToughMan.Rows.Count == 0)

{

str = new string[] { "SELECT 666 bcd, tod.TOD_TIMESTAMP timestamp, SYSDATE presentTime, tor.TOR_BATCH_NO batchNo, tor.TOR_SEQUENCE_NO seqNo, ps.PS_ORDER_NO orderNo, ps.PS_ORDER_POS itemNo, akt.AT_CUST_NAM customerName, 1 qty, ap.AP_WIDTH_1/1000*AP_HEIGHT_1/1000 sqm, TOD_OPT_RECIPE recipe FROM AUF_KOPF_TEXTE akt, PRD_SEQ ps, AUF_POS ap, C_TOUGH_OPT_DONE tod, C_TOUGH_OPT_RESULT tor WHERE tod.TOD_FURNACE_NO=tor.TOR_FURNACE_NO AND tod.TOD_OPT_RECIPE=tor.TOR_OPT_RECIPE AND tod.TOD_BATCH_NO=tor.TOR_BATCH_NO AND tor.TOR_PIT_NO=tod.TOD_PIT_NO AND tor.TOR_BATCH_NO=ps.PS_BATCH_NO AND tor.TOR_SEQUENCE_NO=ps.PS_SEQUENCE_NO AND ps.PS_ORDER_NO=ap.AP_ORDER_NO AND ps.PS_ORDER_POS=ap.AP_ORDER_POS AND akt.AT_ORDER_NO=ps.PS_ORDER_NO AND tod.TOD_COMPLETE=1 AND tod.TOD_BATCH_NO=", DRBatches["batchNo"].ToString(), " AND tod.TOD_OPT_RECIPE=", DRBatches["recipe"].ToString(), " AND tod.TOD_PIT_NO=", DRBatches["pitNo"].ToString(), " AND tod.TOD_FURNACE_NO IN (", furnaceID, ")" };

DTToughOpt = (DataTable)DANenprod1.fillDT(string.Concat(str));

if (DTToughOpt.Rows.Count > 0)

{

if (DTTough != null)

{

DTTough.Merge(DTToughOpt);

}

else

{

DTTough = DTToughOpt.Copy();

}

}

}

else if (DTTough != null)

{

DTTough.Merge(DTToughMan);

}

else

{

DTTough = DTToughMan.Copy();

}

}

}

finally

{

if (enumerator is IDisposable)

{

(enumerator as IDisposable).Dispose();

}

}

str = new string[] { "SELECT pf.PF_BARCODE bcd, pf.PF_DATE_TIME timestamp, SYSDATE presentTime, ps.PS_BATCH_NO batchNo, ps.PS_SEQUENCE_NO seqNo, ps.PS_ORDER_NO orderNo, ps.PS_ORDER_POS itemNo, akt.AT_CUST_NAM customerName, 1 qty, ap.AP_WIDTH_1/1000*AP_HEIGHT_1/1000 sqm, 0.0 recipe FROM AUF_KOPF_TEXTE akt, PRD_FERTIG pf, PRD_SEQ ps, AUF_POS ap WHERE pf.PF_BATCH_NO=ps.PS_BATCH_NO AND pf.PF_SEQUENCE_NO=ps.PS_SEQUENCE_NO AND ps.PS_ORDER_NO=ap.AP_ORDER_NO AND ps.PS_ORDER_POS=ap.AP_ORDER_POS AND akt.AT_ORDER_NO=ps.PS_ORDER_NO AND pf.PF_DATE_TIME BETWEEN TO_DATE('", startDate, "','DD-MON-YY HH24:MI') AND TO_DATE('", finishDate, "','DD-MON-YY HH24:MI') AND pf.PF_STATION IN (", furnaceID, ") UNION SELECT lb.LB_BCD bcd, lb.LB_TIMESTAMP timestamp, SYSDATE presentTime, ps.PS_BATCH_NO batchNo, ps.PS_SEQUENCE_NO seqNo, ps.PS_ORDER_NO orderNo, ps.PS_ORDER_POS itemNo, akt.AT_CUST_NAM customerName, 1 qty, ap.AP_WIDTH_1/1000*AP_HEIGHT_1/1000 sqm, 0.0 recipe FROM AUF_KOPF_TEXTE akt, C_LOG_BCD lb, PRD_SEQ ps, AUF_POS ap WHERE lb.LB_BATCH_NO=ps.PS_BATCH_NO AND lb.LB_SEQUENCE_NO=ps.PS_SEQUENCE_NO AND ps.PS_ORDER_NO=ap.AP_ORDER_NO AND ps.PS_ORDER_POS=ap.AP_ORDER_POS AND akt.AT_ORDER_NO=ps.PS_ORDER_NO AND lb.LB_TIMESTAMP BETWEEN TO_DATE('", startDate, "','DD-MON-YY HH24:MI') AND TO_DATE('", finishDate, "','DD-MON-YY HH24:MI') AND lb.LB_STATION IN (", furnaceID, ") " };

DTScanBcd = (DataTable)DANenprod1.fillDT(string.Concat(str));

if (DTScanBcd.Rows.Count > 0)

{

if (DTTough != null)

{

try

{

enumerator1 = DTScanBcd.Rows.GetEnumerator();

while (enumerator1.MoveNext())

{

DTTough.ImportRow((DataRow)enumerator1.Current);

}

}

finally

{

if (enumerator1 is IDisposable)

{

(enumerator1 as IDisposable).Dispose();

}

}

}

else

{

DTTough = DTScanBcd.Copy();

}

}

}

catch (Exception exception)

{

ProjectData.SetProjectError(exception);

Exception ex = exception;

string str1 = this._senderAddress;

string settings = MySettingsProperty.Settings.emailErrorRecipient;

str = new string[] { MyProject.Computer.Name.ToString(), ": error in: ", this.GetType().Name, ".", MethodBase.GetCurrentMethod().Name.ToString() };

Email.SendMailMessage(str1, settings, "", "", string.Concat(str), string.Concat("\r\n", ex.ToString()));

ProjectData.ClearProjectError();

}

return (DTTough != null ? DTTough : DTScanBcd);

}

[/пре]


Имеет оно смысл? Или нет?


Вот переработанный кусок:

public void loadDTItemsFurnace2(string pMachineIDs, DateTime pStartDate, DateTime pFinishDate)

{

try

{

TBatches.Table batches = new TBatches.Table();

batches.Load(pMachineIDs, pStartDate, pFinishDate);

TToughMan.Table toughMan = new TToughMan.Table();

TToughOpt.Table toughOpt = new TToughOpt.Table();

foreach (TBatches.Row batch in batches)

{

toughMan.Load(pMachineIDs, batch.BatchNo, batch.Recipe, batch.PitNo);

toughOpt.Load(pMachineIDs, batch.BatchNo, batch.Recipe, batch.PitNo);

this.Append(toughMan);

this.Append(toughOpt);

}

TScanBcd.Table scanBcd = new TScanBcd.Table();

scanBcd.Load(pMachineIDs, pStartDate, pFinishDate);

this.Append(scanBcd);

}

catch (Exception ex)

{

TExceptionHandler.Error(ex);

}

}

Тут вроде смысл просматривается... но это - почти день работы.

 

Перейти на